2016-07-27 78 views
0

我有3個表來存儲與好惡人民的根本利益:pagespages_likespages_dislikes只能選擇一個已被喜歡或不喜歡的特定頁面?

現在我想有一個主頁,顯示一個隨機的頁面,但只有那些沒有被喜歡或不喜歡通過用戶。

這是我的SQL語句:

SELECT p.id AS page_id, d.uid AS duid, l.uid AS luid, p.title FROM pages p 
JOIN pages_dislikes d on d.page_id = p.id JOIN pages_likes l on l.page_id = p.id 
WHERE d.uid != '3' AND l.uid != '3' ORDER BY rand() LIMIT 1 

但是,這仍然表明已經喜歡或不喜歡的網頁,因爲有其他用戶喜歡或不喜歡這樣的頁面:

enter image description here

我怎麼能只顯示一個特定的用戶ID不喜歡或不喜歡的頁面?

回答

1

您的查詢應該是:

SELECT 
    p.id AS page_id 
    ,d.uid AS duid 
    ,l.uid AS luid 
    ,p.title FROM pages p 
LEFT JOIN pages_dislikes d on d.page_id = p.id 
LEFT JOIN pages_likes l on l.page_id = p.id 
WHERE (d.page_id IS null OR l.page_id is null) AND d.uid != '3' AND l.uid != '3' 
ORDER BY rand() LIMIT 1 

您也可以嘗試此查詢:

SELECT P.pageid, P.pagename FROM Pages P LEFT JOIN 
(
    SELECT pageid FROM lik WHERE uid <> 3 
    UNION 
    SELECT pageid FROM dis WHERE uid <> 3 
) LikesDislikes ON LikesDislikes.pageid = P.pageid 
ORDER BY rand() LIMIT 1 
+0

但我不希望它是空的,我要排除只是一個特定的用戶ID (uid),就像我的例子 – AlexioVay

+0

中的用戶標識3一樣,它應該是page_id。現在你可以添加你想要的任何條件。 –

+0

對不起,以前沒有看到你的編輯。那麼,即使頁面還沒有被人喜歡或不喜歡,現在我根本沒有得到任何結果。 – AlexioVay