0

我四处搜索并找到了许多解决我问题的方法,但我仍然遇到一个问题。我正在尝试创建一个每行有四个图像的表。这已经完成了。我已经告诉脚本按rewardid 分组,它这样做了,所以现在不会出现重复的图像(我在网站上找到了执行这些操作的步骤)。我遇到的问题是我试图在每个图像下放置一个乘数来计算每组中有多少。(即假设我有 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>";

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

4

2 回答 2

3

像这样更新您的查询:

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

$res['no_of_rewards']将保留您的号码。

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

这些东西被称为“聚合函数”。更多在文档中。

于 2013-03-28T08:39:25.823 回答
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 代替)

于 2013-03-28T08:53:23.237 回答