*实际问题比帖子标题复杂得多: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
所以我想做的是
- 通过特定的vote_id查询表格
- 然后计算 1 中的查询中有多少人投票赞成,有多少人投票反对
- 然后我还想检查 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 的投票方式返回包含 up
、down
或 NULL
的行。假设他只能投票一次...
请注意,在 vote_type
和 vote_user
上添加索引将有助于提高性能。
关于php - 根据字段值计算 num_rows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10266177/