Как получить доступ к двум столбцам с одинаковыми именами в запросе MySQL LEFT JOIN? - PullRequest
2 голосов
/ 27 марта 2010

У меня есть две таблицы.

table_x:

id    INT(11)
tag   INT(11)

table_tags:

id    INT(11)
name  VARCHAR(255)

Затем я использую PHP для выполнения следующего запроса:

SELECT * FROM table_x LEFT JOIN table_tags ON table_x.tag = table_tags.id

Единственная проблема: как мне получить доступ к table_x.id и table_tags.id в результатах?

Вот код PHP:

$query = "SELECT * FROM table_x LEFT JOIN table_tags ON table_x.tag = table_tags.id";
$results = mysql_query($query);

while($row = mysql_fetch_array($results))
{
    // how do I now access table_x.id and table_tags.id ???
}

Ответы [ 2 ]

4 голосов
/ 27 марта 2010

Вы называете столбцы в вашем списке столбцов:

SELECT 
  table_x.id AS x_id, 
  table_tags.id AS tag_id,
  other, columns, here
FROM table_x LEFT JOIN table_tags 
ON table_x.tag = table_tags.id

Как правило, считается правильным указывать имена столбцов, которые вы хотите вернуть явно, а не полагаться на * (что может привести к изменению фактического числа, порядка и имен столбцов при изменении базовой структуры таблицы). В то же время вы можете создать псевдоним столбца с новыми именами в наборе результатов для простоты использования (ключевое слово AS является необязательным на большинстве диалектов SQL).

Обновление: ОП в комментарии указывает, что он должен использовать "*". Хотя это не рекомендуется, вы можете сделать это:

SELECT 
  table_x.id AS x_id, 
  table_tags.id AS tag_id,
  *
FROM table_x LEFT JOIN table_tags 
ON table_x.tag = table_tags.id

, который сочетает в себе как нужные столбцы, так и (плохую) технику "*". Ваши столбцы будут включены в результирующий набор дважды, в первые две позиции столбцов и в их обычные позиции в списке столбцов. Значения будут одинаковыми.

1 голос
/ 02 апреля 2010

Используйте это так

$ query = "SELECT (table_x.id) AS xid, (table_tags.id) AS tid FROM table_x СЛЕДУЮЩАЯ ПОДКЛЮЧЕНИЕ table_tags ON table_x.tag = table_tags.id";

$ results = mysql_query ($ query);

while ($ row = mysql_fetch_array ($ results)) {

**//fetch id of table_x with xid**

 **echo "table_x id: ".$row['xid'];**

// извлечение идентификатора table_tags с tid

 **echo "table_tags id: ".$row['tid'];**

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...