2017-01-04 21 views
0

我想排序頁喜歡/總和所有用戶不喜歡我共享同一頁喜歡/不喜歡與和訂購吧最喜歡/不喜歡的組合。排序方式相互喜歡/所有用戶的好惡,由像分離或不喜歡

我嘗試加入同一張桌子本身,但我不知道如何分開COUNT,我同時得到喜歡和不喜歡的同時不改變WHERE條件。

假設我的UID(用戶ID)是544我有這個疑問:

SELECT l1.id, l1.uid, l1.item_id, l1.status, l2.id, l2.uid, l2.item_id, l2.status, 
    COUNT(*) AS common_likes, 
    COUNT(*) AS common_dislikes // should check for status = 0 
FROM pages_likes AS l1 
JOIN pages_likes AS l2 ON l1.item_id = l2.item_id 
WHERE l1.uid != 544 AND l2.uid = 544 
GROUP BY l1.uid 
ORDER BY common_likes DESC, l1.uid DESC 
LIMIT 10 

事實上這個查詢一般提供錯誤的結果,因爲我可以檢查單用戶頁面的共同喜好/不喜歡和計數是不同的,我從這個查詢common_likes得到的結果。例如,我有www.domain.com/user/123/,並查看我使用uid IN (123,544)檢查特定用戶標識的常見喜好的所有常見喜好/不喜歡情況。但是現在我需要所有用戶的概述(www.domain.com/users/),所以它應該是一個不同的查詢。

因此,我發佈的查詢是我想出的並需要改進的查詢。

表結構:

page_likesiduiditem_idstatusdate

uid裝置的用戶ID。

status = 1的意思就像。

status = 0表示不喜歡。

查詢輸出:

enter image description here

+0

你會得到同樣的喜好和不喜歡的數量。這是你的問題? – Viki888

+0

是的,因爲它與其他別名使用的SELECT相同。就像我說的,喜歡的數量也是不正確的,我也想把它分成喜歡和不喜歡的東西。 – AlexioVay

回答

1

嘗試使用SUMcase聲明,而不是count像下面

SELECT l1.id, l1.uid, l1.item_id, l1.status, 
    SUM(CASE WHEN status = 1 THEN 1 ELSE 0 END) AS common_likes, 
    SUM(CASE WHEN status = 0 THEN 1 ELSE 0 END) AS common_dislikes 
FROM pages_likes AS l1 
WHERE l1.uid = 544 
GROUP BY l1.uid 
ORDER BY common_likes DESC, l1.uid DESC 
LIMIT 10; 

也沒有必要爲您的方案self-join

希望這會幫助你。

+0

謝謝,但用你的查詢你只檢查用戶ID 544.我想'SELECT' **所有用戶**,我有共同的喜歡和不喜歡。這隻會輸出我自己喜歡/不喜歡的內容,而不是我與他人分享的內容。 – AlexioVay

+0

@Vay你能否用這些數據的樣本數據和預期結果來闡述你的問題。請提供示例數據作爲文本而不是圖片。 – Viki888