2012-01-17 34 views
1

我正在做一個新聞源類型的東西,我想從多個表中選擇。我將着重討論這個問題的兩張表是「帖子」和「照片」。MYSQL查詢從多個表中選擇,按日期排序,不同的表結構

這裏是我的只是職位查詢:

mysql_query(" 
      SELECT * FROM posts 
      WHERE toID='$id' AND state='0' 
      ORDER BY id DESC LIMIT 10"); 

我的帖子表具有以下的列名:

Table: posts 

id toID fromID post state  date 
1 1  1  Aloha 0  1 
2 1  1  Hello 0  3 

我的照片表有以下幾點:

Table: photos 

id userID photo state date 
1  1  2  0  2 
2  1  6  0  4 

預期結果:

Aloha 
2 
Hello 
6 

也許是這樣的:

SELECT * 
(SELECT * FROM posts WHERE toID=$id AND state=0) AND 
(SELECT * FROM photos WHERE userID=$id AND state=0) 
ORDER BY date 

當它從它應該從哪裏風溼和用戶ID是相同的選擇數據庫選擇這些。狀態應該等於0,(0表示可見),它們應該按日期排序。此外,我需要創建一個新的變量傳遞給我的查詢,所以我可以在我的PHP中確定信息來自哪個表。最後,我希望按照日期對照片進行分組,因此,假設用戶在30分鐘內上傳了20張照片,他們只會返回一行。我使用php time()來存儲我的日期。

+0

這裏有一個解決方案,我認爲會有所幫助。 http://stackoverflow.com/questions/3844655/how-to-get-data-from-three-tables-by-a-join-statement-in-mysql – Stanley 2012-01-17 10:35:44

回答

2

如果你想獲得的所有帖子和照片一起,你可以使用:

SELECT po.*, ph.* FROM posts po 
LEFT JOIN photos ph 
    ON po.toID = ph.userID 
WHERE po.state = 0 
    AND ph.state = 0 
ORDER BY po.id DESC, ph.date DESC 
+0

它返回帖子,但不是照片。 – 2012-01-17 10:12:07

+0

@DylanCross:它爲每個帖子返回帖子和照片(如果有的話,請參閱'LEFT JOIN')。你確定你正確地複製了我的查詢嗎? – Marco 2012-01-17 10:15:59

+0

是的,也許我的問題還不夠清楚?如果我有2個帖子(post1,post2)和2張照片(photo1,photo5),應該返回4行 – 2012-01-17 10:20:04

相關問題