[英]Count num_rows base on field value
*實際問題比帖子標題復雜得多:S
假設我有桌子
ID | vote_id | vote_type | vote_user
1 ---- 2 ----- up ------- Tom
2 ---- 3 ----- up ------- John
3 ---- 3 ----- down ----- Harry
4 ---- 4 ----- up ------- Tom
5 ---- 2 ----- down ----- John
6 ---- 3 ----- down ----- Tom
所以我想做的是
我的方法是
$up=0;
$down=0;
$voted="no";
$r=mysql_query("SELECT*FROM table_name WHERE vote_id == 3");
while($row=mysql_fetch_array($r){
if($row["vote_type"]=="up"){ $up++;}else{$down++;}
if($row["vote_user"=="John"){ $voted="yes";}
}
但是有一種方法(等效代碼)無需使用WHILE LOOP即可執行此操作,因為實際表可能非常大,因此運行while循環可能非常詳盡:
編輯我可以使用單個查詢嗎?
使用兩個單獨的查詢:
計算所有票數 :
SELECT vote_type, COUNT(*) AS amount
FROM table_name
WHERE vote_id = 3
GROUP BY vote_type
最多返回兩行:
vote_type | amount
----------+--------
up | 1
down | 2
找出約翰是否投票 :
SELECT vote_type
FROM table_name
WHERE vote_id = 3
AND vote_user = 'John'
將根據John的投票方式返回包含up
, down
或NULL
的行。 假設他只能投票一次...
請注意,在vote_type
或也許vote_user
上添加索引將有助於提高性能。
您可以運行此查詢為您提供特定表決_id的上下表決表。
select vote_type, COUNT(*) from votes where vote_id = 2 AND group by vote_type
我將運行另一個查詢來檢查約翰是否投票給了vote_id
select count(*) from votes where vote_id = 2 AND vote_user = 'John'
在一個查詢中
Select
sum(case when vote_type = 'up' then 1 else 0 end) as up,
sum(case when vote_type = 'down' then 1 else 0 end) as down,
sum(case when vote_user = 'john' then 1 else 0 end) as john
from
yourTable
where
vote_id = 3
或總和的任何變化(當情況下)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.