2015-04-21 96 views
0

Main Table:'posts'。
結構:從2個表格中獲取數據,其中一個表格取決於另一個表格

id || text || time || user_id 


次要表: '喜歡'。
結構:

id || post_id || time || user_id 


這裏,從第二表中的POST_ID可以(&必須)是從所述第一表的ID。我想運行一個查詢,我將從特定user_id的posts表中獲取所有ID,並從特定user_id的喜歡錶中獲取所有POST_ID。

這是我試過,但它只是變得從職位表中的ID,從喜歡錶沒有什麼牽強:

"SELECT id FROM posts WHERE id IN (SELECT post_id FROM likes WHERE user_id=$userid) OR id IN (SELECT id FROM posts WHERE user_id=$userid)" 

然而,當我刪除或語句結尾,從post_ids喜歡的表格被提取:

"SELECT id FROM posts WHERE id IN (SELECT post_id FROM likes WHERE user_id=$userid)" 

我在做什麼錯了?請幫忙。非常感激。謝謝!

附加:

任何方式,責令其ID的降序排列?

如果我通過「p.id DESC」命令它們,那麼所有來自likes表的post_ids都出現在底部。

例如,
有在後表7點的ID(1,2,3,4,5,9,10),
3喜歡錶(6,7,8)。

目前,它顯示這樣的:10,9,5,4,3,2,1,6,7,8,

如何顯示它喜歡:10,9%,8,7%,6, 5,4,3,2,1?謝謝!

+3

MySQL的加入可以更好的幫助你在這。 –

回答

1

您可以嘗試在此方案中像這樣的MySQL LEFT JOIN如果你想從交表ALL ID,否則簡單INNER JOIN會做你的任務。

SELECT p.id,l.post_id FROM posts p 
    LEFT JOIN likes l ON p.id=l.post_id 
WHERE p.user_id=$userid OR l.user_id=$userid 

編輯:

SELECT p.id FROM posts p 
LEFT JOIN likes l ON p.id=l.post_id 
WHERE p.user_id=$userid OR 
l.user_id=$userid 
ORDER BY p.id DESC 
+0

有沒有辦法以ID的降序排列呢?如果我通過「p.id DESC」命令他們,那麼所有來自likes表的post_id出現在底部。例如,張貼表(1,2,3,4,5,9,10)中有7個ID,喜歡錶(6,7,8)中有3個。目前顯示如下:1,2,3,4,5,9,10,6,7,8.如何顯示:1,2,3,4,5,6,7,8,9, 10.?謝謝! –

+0

@Trondro Mulligan,您是否嘗試過「p.id ASC」,請注意,在此表中沒有匹配的情況下,所有「l.post_id」字段都爲NULL的LEFT JOIN會生成結果。這對你來說是完美的,因爲對於ORDER BY而言,NULL被認爲小於任何值。 –

+0

我沒有。我想以降序將它們列出,對於寫出相反的內容我表示抱歉。清單應該是這樣的:10,9,8,7,6,5,4,3,2,1.謝謝! –

1

使用JOIN

SELECT id FROM posts 
LEFT JOIN likes ON posts.id = likes.post_id 
WHERE likes.user_id = $userid 
相關問題