我有两张 table 。
表_x:
id INT(11)
tag INT(11)
表标签:
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 ???
}
最佳答案
您在列列表中命名列:
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
它结合了您想要的命名列和(糟糕的)“*”技术。您的列将两次包含在结果集中,一次是在前两个列位置,一次是在列列表中的常规位置。这些值将是相同的。
关于php - 如何在 MySQL LEFT JOIN 查询中访问两个同名的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2527090/