2013-08-02 4 views
0

Для одной таблицы, я обычно делаю что-то вроде этого:Как получить столбцы из объединенной таблицы в PHP?

$length = 42; 
$result = mysql_query ('SELECT * FROM table WHERE length = "' . $length . '"', $dbconn); 
$rowsfound = mysql_num_rows ($result); 
if ($rowsfound == 1) { 
    $row = mysql_fetch_array ($result); 
    $tableid = $row ['table_id']; 
    $tablecloth = $row ['tablecloth']; 
    $height = $row ['height']; 
    ... 

Но как я получаю строки из присоединяемой таблицы, как это:

$chairid = 123; 
$result = mysql_query ('SELECT * FROM table,chair WHERE chair.id = "' . $chairid . '" AND table.table_id = chair.table_id', $dbconn); 
$rowsfound = mysql_num_rows ($result); 
if ($rowsfound == 1) { 
    $row = mysql_fetch_array ($result); 
    $tableid = $row ['table.table_id']; 
    $tablecloth = $row ['table.tablecloth']; 
    $height = $row ['table.height']; 
    ... 

Это не возвращает значения $ table.tablecloth. Что я делаю не так?

+0

Почему у вас есть закрывающая скобка после каждого значения '$ row'? - '$ row ['']);' – Sean

+0

Кроме того, вам не нужно использовать имя таблицы - $ tableid = $ row ['table_id']; '/' $ tablecloth = $ row ['tablecloth'] ; '/' $ height = $ row ['height']; 'работает просто отлично. – Sean

ответ

1

сделать это с помощью JOIN вместо

SELECT * FROM table 
    INNER JOIN chair ON table.table_id = chair.table_id 
    WHERE chair.id = "' . $chairid . '" 
+0

Это самый элегантный из трех ответов, которые существуют в данный момент. Я попробовал, и это сработало, так что это ответ, который я принял. – Fredashay

+0

приятно, что это помогло вам :). удачи . –

0

Вы бы лучше делать правильный РЕГИСТРИРУЙТЕСЬ как echo_Me предложил, но это правильный синтаксис для пути вы кодирования его.

$result = mysql_query ('SELECT table.*,chair.* FROM table,chair WHERE chair.id = "' . $chairid . '" AND table.table_id = chair.table_id', $dbconn); 

Тогда

if ($rowsfound == 1) { 
    $row = mysql_fetch_array ($result); 
    $tableid = $row ['table_id']; 
    $tablecloth = $row ['tablecloth']; 
    $height  = $row ['height']; 

Результаты не получают вернулся с именем таблицы перед именами столбцов. Это может вызвать проблему, если у вас есть имя столбца с тем же именем в обеих таблицах.

+0

Да, после того, как я задал этот вопрос, я понял, что моя самая большая проблема (помимо несбалансированного пароля и использования зарезервированных слов в моем примере) были моими именами неоднозначными. Явное назначение столбцов вместо * и использование AS для переназначения имен столбцов с уникальными именами было одним из вариантов, но неуклюжим. Выполнение INNER JOIN, поскольку echo_Me предложил работать отлично и выглядит более красивым кодом. – Fredashay

-1

Я думаю, у вас есть дополнительная закрывающая скобка ???)

$tableid = $row ['table.table_id']); 
$tablecloth = $row ['table.tablecloth']); 
$height = $row ['table.height']); 
1

Причина вы не получаете никаких результатов, потому что ваш запрос не удается. table является зарезервированным словом, так что вам нужно добавить обратно клещей вокруг него следующим образом:

$result = mysql_query ('SELECT * FROM `table`,`chair` WHERE `chair`.id = "' . $chairid . '" AND `table`.table_id = `chair`.table_id', $dbconn); 

Вы бы уже понял это, если вы имели надлежащую обработку ошибок в месте, как следующее (обратите внимание на or die():

$result = mysql_query ('SELECT * FROM `table`,`chair` WHERE `chair`.id = "' . $chairid . '" AND `table`.table_id = `chair`.table_id', $dbconn) or die(mysql_error()) 

Пожалуйста, обратитесь к списку зарезервированных слов здесь: http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html

Помимо этого, как Ким отметил, вам также нужно зафиксировать дополнительную закрывающую скобку

.
Смежные вопросы