我的数据库中有两个表:
包含列的新闻表:
id
-新闻id user
-作者的用户id )包含列的USERS表:
id
-用户id我想执行下面的SQL:
SELECT * FROM news JOIN users ON news.user = user.id
当我在PHP中得到结果时,我想通过$row['column-name']
获得关联数组和列名。如何获取具有相同列名的新闻ID和用户ID?
发布于 2009-01-10 17:37:42
您可以为要选择的列设置别名:
$query = 'SELECT news.id AS newsId, user.id AS userId, [OTHER FIELDS HERE] FROM news JOIN users ON news.user = user.id'
发布于 2009-01-10 17:38:21
您可以使用数值索引($row[0]
),或者更好,在MySQL中使用AS
:
SELECT *, user.id AS user_id FROM ...
发布于 2009-11-14 10:11:54
我刚想通了。这可能是一种糟糕的做法,但在这种情况下,它对我很有效。
我是懒人中的一员,我不想给每个列名加上表前缀,也不想写出它们的别名。
通过在select语句中使用table_name.*
,可以选择特定表中的所有列。
当您有重复的列名时,mysql将从头到尾覆盖。当第一个重复的列名再次遇到该列名时,该列名中的数据将被覆盖。因此,最后出现的重复列名将胜出。
如果我要连接3个表,每个表都包含一个重复的列名,那么select语句中表的顺序将决定我将从重复的列中获得什么数据。
示例:
SELECT table1.* , table2.* , table3.* FROM table1 LEFT JOIN table2 ON table1.dup = table2.dup LEFT JOIN table3 ON table2.dup = table3.dup;
在上面的示例中,我将从table3
获得dup
的值。
如果我希望table1
中的值为dup
,该怎么办
然后我需要这样做:
SELECT table3.* , table2.* , table1.* FROM table1 LEFT JOIN table2 ON table1.dup = table2.dup LEFT JOIN table3 ON table2.dup = table3.dup;
现在,table1
位于最后,因此dup
的值将是来自table1的值。
我得到了我想要的dup
的值,而不必写出每一个奇怪的列,而且我仍然可以处理所有列。耶!
我知道在所有3个表中dup
的值应该是相同的,但是如果table3
没有与dup
匹配的值怎么办?那么在第一个示例中dup
将是空白的,这将是一个令人沮丧的问题。
https://stackoverflow.com/questions/431391
复制相似问题