按日期组合在一起,但显示所有行

时间:2012-12-06 01:13:53

标签: php mysql mysqli

通常情况下,当我把东西组合在一起时,显然可以将重复组合在一起,但我正在制作一个赢家页面,显示一堆累积奖金的获胜者,一些累积奖金有1个赢家,而其他有3个,使用{{1如果只有1名获胜者将会有效,但只有1名获胜者才能获胜。

这是我的代码

GROUP BY date

它打印出一个像这样的表

$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>";
}

因为只有1名获胜者,所以--------------------------------------- Daily Jackpot Winners Username| $5.00 | 12/5/2012 // This table is right, because there is only 1 winner --------------------------------------- 确实没有任何影响

以下是多个获奖者的表格

GROUP BY

它需要看起来像这样

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

我该如何做到这一点?

编辑:这可以更好地解释https://gist.github.com/4221167

4 个答案:

答案 0 :(得分: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>";

答案 1 :(得分: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>";

答案 2 :(得分:0)

尝试删除GROUP BY并仅使用ORDER BY

答案 3 :(得分: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