我有两张桌子。
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 ???
}
答案 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'];**
}