php计数分组值

时间:2013-03-28 08:34:52

标签: php mysql

我已经四处寻找并找到了许多我的问题的解决方案,但我仍有一个问题。我正在尝试创建一个每行有四个图像的表。这已经完成了。我告诉脚本按照励赐进行分组,这样就可以了,所以现在没有出现重复的图像(我在网站上找到了这些步骤)。我遇到的问题是,我试图在每个图像下放一个乘数来计算每组中有多少。 (即让我说我有5枚奖牌。在我的页面上,它只显示一枚奖牌,但我真的有5枚,所以我想在图像下面说x5。)这是我到目前为止所拥有的:

print "<div class='style1'><br>  <br><h2>User Medals</div></h3><br />
<table width='80%' class='table' border='0' cellspacing='1'><tr bgcolor='gray'><th></th><th></th><th></th><th></th></tr>";
    $result=mysql_query("SELECT * FROM awardsearned WHERE userid=$userid group by rewardid");
    $count = 0;
    while($res=mysql_fetch_array($result))
    {
    $award = $res['rewardpic'];
    $award2 = $res['rewardid'];
    $result2=mysql_query("SELECT awardid, count(rewardid) FROM awardsearned WHERE rewardid=$award2 AND userid=$userid");
            $count2 = count($result2); 
        if($count==4) //three images per row
        {
           print "</tr>";
           $count = 0;
        }
        if($count==0)
           print "<tr>";
        print "<td>";

        print "<center><img src='$award' width='100' height='100'/><br />x$count2</center> ";

        $count++;
        print "</td>";
    }
    if($count>0)
       print "</tr>";
print "
</table>";

很抱歉,如果这搞砸了,以前从未在这里发布过。如果需要http://pastebin.com/iAyuAAzV

,它就在pastebin上

2 个答案:

答案 0 :(得分:4)

像这样更新您的查询:

SELECT *,COUNT(rewardid) no_of_rewards 
     FROM awardsearned WHERE userid=$userid group by rewardid

$res['no_of_rewards']会保留您的电话号码。

这也消除了对第二个查询的需要。

这些东西被称为“聚合函数”。更多内容见documentation

答案 1 :(得分:0)

回答你的问题:

$ result2的值只能给出TRUE(1)或FALSE(0)。如果你的查询执行正确,$ count2将返回1,因此你的代码总是得到1。

尝试并更改

$result2=mysql_query("SELECT awardid, count(rewardid) FROM awardsearned WHERE rewardid=$award2 AND userid=$userid");
$count2 = count($result2); 

$result = mysql_query("SELECT awardid, count(rewardid) FROM awardsearned WHERE rewardid=$award2 AND userid=$userid");
$arr = mysql_fetch_array($result);
$count2 = count($arr); 

这应该为您提供结果集中实际记录的麻木。

有更好的方法可以做到这一点(看看Bart Friederichs的答案!),就像只做SELECT并循环遍历结果集一样。这将是性能和灵活性。

另外考虑一下我现在不推荐使用mysql_query,不应该使用它。 (预备方法是使用PDO或mysqli)