2009-07-09 17 views
0

首先,請原諒我可憐的話題。我根本不知道如何制定這個問題或谷歌後,如果這是容易回答的問題,請不要開槍。MySQL加入後,如何輸出關係「正確的方式」

假設我有以下表格:

[作者] ID,名稱

[新聞] ID,項目,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。

+0

你能提供關於你的課程的更多細節嗎?它是否獲取對象中的所有參數? – lfx 2009-07-09 19:12:45

回答

6

從不在生產代碼中使用*語法。

重寫查詢,因爲這:

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

,混淆你的領域必須避免命名衝突。

+0

非常感謝!這個伎倆。 這不是生產代碼,當然:-) – subZero 2009-07-09 19:23:32

1

您需要使用像news.item或authors.item這樣的限定名稱。

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 *時被認爲是不好的風格,總是命名你感興趣的列,或者很容易破壞代碼,例如,另一列被添加到表中。