簡體   English   中英

根據字段值計算num_rows

[英]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

所以我想做的是

  1. 通過特定的表決ID查詢表
  2. 再算上多少投多少從查詢中1 否決
  3. 然后,我還想檢查一下約翰是否投票給了vote_id。

我的方法是

$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的投票方式返回包含updownNULL的行。 假設他只能投票一次...

請注意,在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM