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它将您的日期放入逻辑“分组”中。

为了回应您关于 ho 将结果输出到一个表中的评论,以下是您需要修改代码的方式。

$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 回答