0

首先,请原谅我糟糕的主题标题。我根本不知道如何制定这个问题或谷歌之后的内容,所以如果这很容易回答,请不要开枪。

假设我有以下表格:

[作者] ID,姓名

[新闻] id, item, author_id

如果我想显示一条新闻并输出相应的作者(存储在 author_id 中),我会执行以下查询:

SELECT * FROM `news` JOIN `authors` ON news.author_id = authors.id

然后通过做这样的事情输出它

$Q = "SELECT * FROM news JOIN authors ON news.author_id=news.id";

$query = $this->lite->query($Q) or die($this->lite->error); 

$result=null; while($obj = $query->fetch_object()){
        $result.= '<li>'.$obj->item. 'by ' . $obj->name . '</li>';
}

在这里,$obj->name 将包含作者的姓名并成功输出。

那么,如果将“name”字段改为“item”会发生什么?显然会有一些冲突。以我以前在 Propel 和 symfony 方面的经验,我会做这样的事情:getAuthorId()->getName() - 但是对于这个项目,我需要从头开始编写 SQL。

4

3 回答 3

6

*永远不要在生产代码中使用语法。

将您的查询重写为:

SELECT  news.item AS news_item, author.name AS author_name
FROM    `news`
JOIN    `authors`
ON      news.author_id = authors.id

,根据需要对字段进行别名以避免命名冲突。

于 2009-07-09T19:10:27.670 回答
1

您需要使用限定名称,例如 news.item 或 authors.item。

于 2009-07-09T19:11:33.767 回答
0

您明确命名它们

SELECT  n.id, n.item, n.author_id,a.name,a.id 
FROM 
`news` as n JOIN `authors` as a 
ON 
n.author_id = n.id

;

或者也许更像

SELECT  n.id as newsid, n.item as newsitem, n.author_id as autohor_authorid,
a.name as authorname,a.id as authorid 
FROM 
`news` as n JOIN `authors` as a 
ON 
n.author_id = n.id;

您应该只拉出您实际需要的列。select * 被认为是不好的风格,总是命名您感兴趣的列,或者如果将另一列添加到表中,则很容易破坏代码。

于 2009-07-09T19:19:26.483 回答