首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何解决检索结果时列名不明确的问题?

如何解决检索结果时列名不明确的问题?
EN

Stack Overflow用户
提问于 2009-01-10 17:34:25
回答 11查看 144.1K关注 0票数 76

我的数据库中有两个表:

包含列的新闻表:

  • id -新闻id
  • user -作者的用户id )

包含列的USERS表:

  • id -用户id

我想执行下面的SQL:

代码语言:javascript
复制
SELECT * FROM news JOIN users ON news.user = user.id 

当我在PHP中得到结果时,我想通过$row['column-name']获得关联数组和列名。如何获取具有相同列名的新闻ID和用户ID?

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2009-01-10 17:37:42

您可以为要选择的列设置别名:

代码语言:javascript
复制
$query = 'SELECT news.id AS newsId, user.id AS userId, [OTHER FIELDS HERE] FROM news JOIN users ON news.user = user.id'
票数 119
EN

Stack Overflow用户

发布于 2009-01-10 17:38:21

您可以使用数值索引($row[0]),或者更好,在MySQL中使用AS

SELECT *, user.id AS user_id FROM ...

票数 43
EN

Stack Overflow用户

发布于 2009-11-14 10:11:54

我刚想通了。这可能是一种糟糕的做法,但在这种情况下,它对我很有效。

我是懒人中的一员,我不想给每个列名加上表前缀,也不想写出它们的别名。

通过在select语句中使用table_name.*,可以选择特定表中的所有列。

当您有重复的列名时,mysql将从头到尾覆盖。当第一个重复的列名再次遇到该列名时,该列名中的数据将被覆盖。因此,最后出现的重复列名将胜出。

如果我要连接3个表,每个表都包含一个重复的列名,那么select语句中表的顺序将决定我将从重复的列中获得什么数据。

示例:

代码语言:javascript
复制
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,该怎么办

然后我需要这样做:

代码语言:javascript
复制
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将是空白的,这将是一个令人沮丧的问题。

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/431391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档