php - 如何在 MySQL LEFT JOIN 查询中访问两个同名的列?

标签 php mysql join

我有两张 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.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 ???
}

最佳答案

您在列列表中命名列:

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/

相关文章:

javascript - 提取元素的 HTML

mysql - 从另一个查询的结果中向查询添加列

Mysql多连接计数

MySQL 连接返回从另一个表链接的不同 ID

sql - 使用 JOIN 来避免数字 ID 是一件坏事吗?

php - 配置文件的权限错误,不应该是全局可写的

php - 如何计算mysql中符合条件的列数?

php - 没有 OOP 的观察者模式逻辑?

MySQL 需要返回列的唯一组合的计数

mysql - npm安装MySQL package.json报错