2013-09-29 40 views
0

使用多個FIND_IN_SET我有2個表:在單個查詢

一個是用戶使用「用戶id」列,另一種是用「是」和「否」列的意見。 「是」和「否」列都包含逗號分隔值。

我想要的是統計「用戶標識」在「是」列中出現的次數以及出現在「否」列中的次數。

我現在所擁有的,因爲它計算的次數#每一個用戶出現在「是」一欄,但不正確的「無」一欄是這樣的

SELECT userid, COUNT(yes), COUNT(no) 
FROM users LEFT JOIN opinion ON (FIND_IN_SET(userid, yes) > 0) 
GROUP BY userid 

上述作品。呼應「不」的結果相同的結果呼應「是」

的樣本數據中的「用戶」

1 
2 
3 

採樣數據「是」

1,2 
1,3 
2,3 
1 

的樣本數據的「不」

1,2 
1,2 
1,3 

期望的結果是與上述數據:

users  yes no 
1   3  3 
2   2  2 
3   2  1 

預先感謝任何幫助

+0

我很困惑。如果是「是」還是「否」,你怎麼看? –

+0

什麼是你想要的結果? –

+0

@ 491243編輯了添加所需結果的問題 –

回答

1

您的查詢只需要一個小調整。還要在另一個表上加入userID與列NO的條件。在計數值期間,還需要在聚合函數MAX()內使用FIND_IN_SET()

SELECT a.userID, 
     SUM(FIND_IN_SET(a.userID, b.yes) > 0) TotalYes, 
     SUM(FIND_IN_SET(a.userID, b.no) > 0) TotalNo 
FROM users a 
     LEFT JOIN opinion b 
      ON FIND_IN_SET(a.userID, b.yes) > 0 OR 
       FIND_IN_SET(a.userID, b.no) > 0 
GROUP BY a.userID 
ORDER BY a.userID 
+0

謝謝。這樣可行!現在如果我在觀點表中有另一列叫做點,我想爲每個用戶找到總和,那該怎麼辦?當查詢 –

+0

,但它也是查看錶的列。每一行都有一個對應點。比方說,他們每個人都是2分,儘管他們可能會有所不同。只有yes列的用戶才能獲得該點數 –

+0

中添加了SUM(點數)時,只有yes列中的用戶才能獲得積分 –