0

私は周りを検索し、私の質問に対する多くの解決策を見つけましたが、まだ1つの問題があります. 行ごとに 4 つの画像を持つテーブルを作成しようとしています。これは実行済みです。スクリプトにrewardidでグループ化するように指示したので、重複する画像は表示されなくなりました(これらを行う手順はサイトで見つけました)。私が問題を抱えているのは、各画像の下に乗数を配置して、各グループに何人いるかを数えようとしていることです。(つまり、メダルが 5 つあるとします。私のページではメダルが 1 つしか表示されていませんが、実際には 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

4

2 に答える 2

3

次のようにクエリを更新します。

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

$res['no_of_rewards']あなたの番号を保持します。

これにより、2 番目のクエリも不要になります。

これらは「集計関数」と呼ばれます。詳しくはドキュメントを参照してください。

于 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); 

これにより、結果セットからの実際のレコード数が得られます。

これを行うには、SELECT のみを実行して結果セットを 1 回ループするなど、より良い方法があります (Bart Friederich の回答を参照してください)。これは、パフォーマンスと柔軟性のためです。

また、mysql_query は現在非推奨であり、使用すべきではないことも考慮してください。(推奨される方法は、代わりに PDO または mysqli を使用することです)

于 2013-03-28T08:53:23.237 に答える