作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个表。
表_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/
我是一名优秀的程序员,十分优秀!