我的数据库查询得到了一个非常奇怪的结果,我希望有人能发现我错过的东西。
以下是一些示例数据:
feeling_id country date feeling digit
25 australia 2011-02-21 bad 1
26 australia 2011-02-21 bad 0
8 france 2011-02-21 better 1
我试图计算数据库中每个国家的数量,以及其中有多少数字为1.所以上述数据会给出:
澳大利亚,数字为1 = 1
数据库中的澳大利亚行= 2
数字为1 = 1的法国
数据库中的法国行= 1
这是代码
<?php
include ('mysqli_connect.php'); // indclude mysql connection functions
$countries = array('united states','canada','united kingdom');
$r = array();
foreach($countries as $country){
//e.g. $r_spain holds the results from the query below with spain as $country
$r[$country] = mysqli_query($dbc,"SELECT * FROM feelings WHERE country = '$country' AND digit='1'");
//loop through the results
while($row = mysqli_fetch_array($r[$country], MYSQLI_ASSOC)){
$rowCount = mysqli_num_rows($r[$country]);
}
//e.g. $r_spain holds the results from the query below with spain as $country
$r[$country] = mysqli_query($dbc,"SELECT * FROM feelings WHERE country = '$country'");
//loop through the results
while($row = mysqli_fetch_array($r[$country], MYSQLI_ASSOC)){
$rowCount2 = mysqli_num_rows($r[$country]);
}
echo $country . '=' . $rowCount . '<br />';
echo $country . '=' . $rowCount2 . '<br />';
}
?>
当数据库中只有两个加拿大行时,我得到以下结果,这些行都没有数字1 ???
美国,数字为1 = 13
数据库中的美国行= 17
加拿大,数字为1 = 13
数据库中的加拿大行= 2
联合王国,数字为1 = 4
数据库中的联合王国行= 4
<小时/> 答案应该说:“数字为1 = 0的加拿大”
加拿大1位答案的数字似乎复制了1个结果的美国数字。
任何人都可以看到我出错的地方吗?
非常感谢,alsweeet
答案 0 :(得分:4)
为什么在sql上执行count()时循环遍历结果?
SELECT COUNT(feeling_id) FROM feelings WHERE country = '$country' AND digit='1'
答案 1 :(得分:2)
您需要在$rowCount
开头设置$rowCount2
和foreach
为0。由于没有找到加拿大的行,因此它永远不会进入while循环,因此会使用上一次迭代中$rowCount
和$rowCount2
的值。
foreach($countries as $country){
$rowCount = 0;
$rowCount2 = 0;
答案 2 :(得分:1)
如果没有匹配的行,则$ rowCount和/或$ rowCount根本没有设置。你需要在循环的顶部将它们设置为0。
然而,有一个更好的方法:
select country, digit, count(*) from your_tbl group by country, digit;
这将返回包含3个字段的结果:country,digit和该组合的匹配行数。