2011-09-24 20 views
3

注意:這不是my other question重複。我改變了表格結構,需要新的查詢幫助。如何構建此SQL查詢。組合多個表?

所以基本上我得到在我的網站的新內容的通知。我有4個表 -

  • 文章
  • 媒體
  • 更新
  • 評論

每個表都有一套自己的列(我可以包括這些,如果有人想)。在我設計的新通知系統中,我通過時間戳確定最新的內容。時間戳值是一個格式爲Unix Time的整數。

剛纔我改變了我的表結構,之前,我的表都有那個相似列。一個例子,文章和媒體都有列id。我用的是SQL代碼是這樣的 -

SELECT a.*,m.*,u.*,c.* from articles AS a 
LEFT JOIN media AS m ON (m.mediaTimestamp = a.timestamp) 
LEFT JOIN updates AS u ON (u.updateTimestamp = a.timestamp) 
LEFT JOIN comments AS c ON (c.commentTimestamp = a.timestamp) 
ORDER BY a.timestamp desc LIMIT 30 

但是這樣做時,該代碼將返回一列的多次反覆在同一行(它將返回的文章和媒體ID列!)。顯然,當我試圖通過代碼獲取數據時,它會爲我提供不同表格的數據(而不是給我文章ID,它會給我媒體ID)。

我對這個解決方案是「漂亮」了我與他們的表前綴代碼及名稱表中的所有列(如文章)(所以ID將成爲articleID)可以。但是現在上面的SQL產生錯誤。有人可以爲我轉換/重組這個SQL。

+1

順便說一句,你有沒有試圖糾正查詢以便a.timestamp成爲a.articleTimeStamp? – Mansuro

+0

是的,我以前做過,我只是意識到,這是從我原來的不同的代碼,我正在搞清楚爲什麼它不會工作,忘記了。我現在明白了,謝謝。在上線81 /home/cryptum1/public_html/weblib/beta/api/content.php – liamzebedee

回答

2

試試這個:

SELECT a.*,m.*,u.*,c.* from articles AS a 
LEFT JOIN media AS m ON (m.mediaTimestamp = a.articleTimestamp) 
LEFT JOIN updates AS u ON (u.updateTimestamp = m.mediaTimestamp) 
LEFT JOIN comments AS c ON (c.commentTimestamp = u.updateTimestamp) 
ORDER BY a.articleTimestamp desc LIMIT 30 
+0

未知列「的條款」在「a.timestamp」請記住,沒有列有時間戳的名字了,他們都前綴內容類型(articleTimestamp,mediaTimestamp等) – liamzebedee

+0

我編輯它,試試這個現在 – Mansuro

+0

酷這部作品,另外一個問題,我將如何得到該行是什麼表最初是從? – liamzebedee