2011-05-20 61 views
0
field: content_id, value=1 or value=0, value_type=option 
table: votingapi_vote 

1,輸出content_id字段並降序,規則根據值(每個content_id的值的計數= 1減去每個content_id的值的計數= 0,每個content_id具有很多值= 0或值= 1)。 the value_type=option一個硬寫查詢在mysql中寫入給我?

有沒有辦法解決這個問題?

即:

$query1=mysql_query(SELECT content_id, COUNT(*) FROM votingapi_vote WHERE value_type = option AND value = 1 GROUP BY content_id) 

$query2=mysql_query(SELECT content_id, COUNT(*) FROM votingapi_vote WHERE value_type = option AND value = 0 GROUP BY content_id) 

我想使用的計數值= 1減計數值= 0,這是的content_id的遞減規律,

對於每一個的content_id,與值的行數= 1減去與值的行數= 0

+2

如何寫的問題。 http://stackoverflow.com/faq。 – Bojangles 2011-05-20 13:34:10

+1

我想我的大腦剛剛彈出! – martynthewolf 2011-05-20 13:34:27

+1

對於每個content_id,值爲1的行數減去值爲0的行數?是對的嗎? – Anonymoose 2011-05-20 13:36:46

回答

1
SELECT content_id, 
     SUM(CASE WHEN value=1 THEN 1 
       WHEN value=0 THEN -1 
       ELSE 0 
      END) AS ContentSum 
    FROM votingapi_vote 
    WHERE value_type = 'option' 
    GROUP BY content_id 
    ORDER BY ContentSum DESC 
+2

而不是CASE語句:SUM(2 * value - 1) – 2011-05-20 13:42:13

+1

@Mark:當然可以。就個人而言,我更喜歡'CASE',因爲1)它更明確地定義了給出的規則(使下一個必須查看代碼的人更容易),2)它將正確處理任何意外的流氓數據(例如,值= 3)。 – 2011-05-20 13:47:15

+0

Joe Stefanelli,你是我的英雄。你像魅力一樣回答工作。非常感謝。但我不知道什麼是CASE WHEN值= 1 THEN 1 WHEN value = 0 THEN -1 ELSE 0 END)的含義。 – zhuanzhou 2011-05-20 13:54:30

0
SELECT content_id, SUM(CASE value WHEN 1 THEN 1 WHEN 0 THEN -1 ELSE 0 END) valuesum 
FROM votingapi_vote 
WHERE value_type = 'option' 
GROUP BY content_id 
ORDER BY valuesum DESC 
+0

你錯過了訂單?我對嗎? – zhuanzhou 2011-05-20 13:52:48

+0

我錯過了你的部分問題 - 我很抱歉,我努力去理解你寫的東西! – 2011-05-20 14:17:38