0

通常、ものをグループ化するときは、重複をグループ化するために明らかに使用されますが、ジャックポットの束の勝者を表示する勝者ページを作成しています。一部のジャックポットには1人の勝者がいて、他のジャックポットには3人の勝者がいますGROUP BY date。勝者は 1 人ですが、勝者が 3 人のはずなのに 1 人しか表示されません。

これが私のコードです

$result = $db->query("SELECT * FROM r_winners GROUP BY date ORDER BY date DESC");
while($rows = $result->fetch_assoc()){
print"<table class='cashout' style='width:100%;'>
<th colspan='3'>".$rows['jackpot_name']." Winners</th>
<tr>
<td style='width:33%;'>".$rows['winner']."</td><td style='width:33%;'>$".$rows['amount']."</td><td style='width:33%;'>".date("m/d/Y", $rows['date'])."</td></tr>
</tr></table>";
}

このような表を出力します

---------------------------------------
Daily     Jackpot     Winners
Username|  $5.00   |  12/5/2012         // This table is right, because there is only 1 winner
---------------------------------------

勝者は 1 人しかGROUP BYいないため、実際にはここでは影響しません。

これは複数の勝者のテーブルです

---------------------------------------
Monthly     Jackpot     Winners
Username  |  $5.00   |  12/5/2012         // This table is wrong, because there should be 3 winners
---------------------------------------

このように見える必要があります

---------------------------------------
Monthly     Jackpot     Winners
Username  |  $5.00   |  12/5/2012 
Username2 |  $2.00   |  12/5/2012
Username3 |  $1.00   |  12/5/2012        
---------------------------------------

どうすればこれを達成できますか?

編集:これはおそらくこれをよりよく説明できます https://gist.github.com/4221167

4

4 に答える 4

2

まったく使わないGROUP BYでください。ORDER BY日付を論理的な「グループ化」するためにすでに使用しています。

結果を 1 つのテーブルに出力する方法についてのコメントに応えて、コードをどのように変更する必要があるかを以下に示します。

$result = $db->query("SELECT * FROM r_winners ORDER BY date DESC");
print "<table class='cashout' style='width:100%;'>";
print "<th colspan='3'>".$rows['jackpot_name']." Winners</th>";
while($rows = $result->fetch_assoc()){
    print "<tr><td style='width:33%;'>".$rows['winner']."</td><td style='width:33%;'>$".$rows['amount']."</td><td style='width:33%;'>".date("m/d/Y", $rows['date'])."</td></tr>";
}
print "</table>";
于 2012-12-06T01:15:59.087 に答える
1

ORDER BYループを使用して再フォーマットし、テーブル要素を外側に配置し、ヘッダーを一度だけ出力するようにクエリを変更します

$result = $db->query("SELECT * FROM r_winners ORDER BY date DESC");
print"<table class='cashout' style='width:100%;'>";
$jackpot_name = '';
while($rows = $result->fetch_assoc()){
    if ($jackpot_name != $rows['jackpot_name']) {
        $jackpot_name = $rows['jackpot_name'];
        print "<th colspan='3'>".$rows['jackpot_name']." Winners</th>";
    }
    print "<tr><td style='width:33%;'>".$rows['winner']."</td><td style='width:33%;'>$".$rows['amount']."</td><td style='width:33%;'>".date("m/d/Y", $rows['date'])."</td></tr>";
}
print "</table>";
于 2012-12-06T01:44:41.087 に答える
0

を削除してGROUP BY、 のみを使用してみてくださいORDER BY

于 2012-12-06T01:16:20.757 に答える
0

GROUP BY Monthly ORDER BY Winnersもちろん、が一意である場合は、その必要MonthlyさえありませんGROUP BY

編集: あなたのphpコードをチェックした後、以下が必要だと思います:

SELECT 
  GROUP_CONCAT(winner_name) AS winner_names,
  SUM(the_value_column_you_want_to_sum) AS amount
FROM r_winners 
GROUP BY date ORDER BY date DESC
于 2012-12-06T01:16:59.900 に答える