如何在MySQL LEFT JOIN查询中访问两个具有相同名称的列?

时间:2010-03-26 22:09:30

标签: php mysql join

我有两张桌子。

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.idtable_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 个答案:

答案 0 :(得分:4)

您可以为列列表中的列命名:

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方言中是可选的)。

更新: OP在评论中指出他必须使用“*”。虽然不建议这样做,但您可以这样做:

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 :(得分:1)

像这样使用

$ query =“SELECT (table_x.id)AS xid,(table_tags.id)AS tid FROM table_x LEFT JOIN 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'];**

//使用tid获取table_tags的ID

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

}