2012-12-12 36 views
0

我有一個很難描述這一點,這是很可能的,我提出這個難度比它應該是...查詢來獲取職位,如果用戶投票後

基本上,我有一個頁面充滿了針腳/帖子,用戶可以upvote或downvote他們。在一個查詢中,我想獲得一個引腳列表,但也要加入兩個表格,以查看用戶是否投了或投下了他們的投票。

表結構:

pins table 

| id |  title  | 
+------+-------------------+ 
    1   Post 1 
    2   Post 2 
    3   Post 3 
    4   Post 4 

user_upvotes table 

| id | user_id | pin_id | 
+------+-----------+----------+ 
    1   1   2 
    2   2   1 
    3   2   3 
    4   2   1 

user_downvotes table 

| id | user_id | pin_id | 
+------+-----------+----------+ 
    1   2   2 
    2   1   1 
    3   1   3 
    4   1   1 

以下是我已經嘗試了查詢,但最終複製頁面上的插針。

SELECT pins.id AS pin_id, title, user_upvotes.id AS upvote, user_downvotes.id AS downvote 
FROM pins 
LEFT JOIN user_upvotes ON user_upvotes.pin_id = pins.id AND user_upvotes.user_id = 2 
LEFT JOIN user_downvotes ON user_downvotes.pin_id = pins.id AND user_downvotes.user_id = 2 

這導致(注意pin_id 1重複兩次):

| pin_id |  title  | upvote | downvote | 
| 1 |  Post 1  | (NULL) |  2  | 
| 1 |  Post 1  | (NULL) |  4  | 
| 2 |  Post 2  |  1 | (NULL) | 
| 3 |  Post 3  | (NULL) |  3  | 
| 4 |  Post 4  | (NULL) | (NULL) | 

從這一點來說我只是檢查,如果該值爲NULL,如果沒有,我附上一個CSS類,表明它已被提高或降低。

本質上,我想上面的結果,只是沒有重複的引腳。如果你有更好的方式來做到這一點,請隨時讓我知道。

+0

你應該保持領域並defalut將它設置爲0遞增或遞減遞增或遞減計數器upvotes和downvotes。 – Smit

回答

1

添加GROUP BY

SELECT pins.id AS pin_id, title, user_upvotes.id AS upvote, user_downvotes.id AS downvote 
FROM pins 
LEFT JOIN user_upvotes ON user_upvotes.pin_id = pins.id AND user_upvotes.user_id = 2 
LEFT JOIN user_downvotes ON user_downvotes.pin_id = pins.id AND user_downvotes.user_id = 2 
GROUP BY pin_id 
-1

這是不是幫助?

SELECT pins.id AS pin_id, title, user_upvotes.id AS upvote, user_downvotes.id AS downvote 
FROM pins 
LEFT JOIN user_upvotes ON user_upvotes.pin_id = pins.id AND user_upvotes.user_id = 2 
LEFT JOIN user_downvotes ON user_downvotes.pin_id = pins.id AND user_downvotes.user_id = 2 
**GROUP BY pins.id** 
1

這可能意味着用戶已經向上或向下投了兩次相同的引腳。由於您在結果中包含了投票的ID,因此您可以將不同的投票記錄爲單獨的記錄。

我覺得你要麼想要點數,要麼想要防止雙重投票。 計數按如下規則進行:

SELECT 
    pins.id AS pin_id, 
    title, 
    COUNT(user_upvotes.id) AS upvotes, 
    COUNT(user_downvotes.id) AS downvotes 
FROM pins 
LEFT JOIN user_upvotes ON user_upvotes.pin_id = pins.id AND user_upvotes.user_id = 2 
LEFT JOIN user_downvotes ON user_downvotes.pin_id = pins.id AND user_downvotes.user_id = 2 
GROUP BY 
    pins.id 

現在,您可以顯示數,或者只顯示它是或否取決於它是否> 0。

+0

你的唯一答案是承認upvote和downvote總數來自任意記錄,並且可能不包含非NULL數據。 'count'修復了這個問題。 –

相關問題