php - 根据字段值计算 num_rows

标签 php mysql

*实际问题比帖子标题复杂得多:S

假设我有一张 table

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. 通过特定的vote_id查询表格
  2. 然后计算 1 中的查询中有多少人投票赞成,有多少人投票反对
  3. 然后我还想检查 John 是否为该 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 循环可能非常详尽:S

编辑 我可以使用单个查询吗?

最佳答案

使用两个单独的查询:

统计所有选票:

    SELECT vote_type, COUNT(*) AS amount
    FROM table_name
    WHERE vote_id = 3
    GROUP BY vote_type

将返回最多两行:

vote_type | amount
----------+--------
up        | 1
down      | 2

查看 John 是否投票:

    SELECT vote_type
    FROM table_name
    WHERE vote_id = 3
    AND vote_user = 'John'

将根据 John 的投票方式返回包含 updownNULL 的行。假设他只能投票一次...

请注意,在 vote_typevote_user 上添加索引将有助于提高性能。

关于php - 根据字段值计算 num_rows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10266177/

相关文章:

php - Laravel 5.4 中的单选按钮

php - Mysql Group By Last Slno(最新版本)

mysql - 如何在windows下制作Qt mysql驱动?

javascript - 输入正确值后重新加载网页

php - 如何给用户上传的图片命名?

mysql - 如何在关系数据库中存储对象?

php - 不正确的算术输出

php - 如何有效地从大表中计算平均值?

php - 选项中的默认值

php - MySql 对不同输入字段的查询,其中一些字段为 NULL