通常情况下,当我把东西组合在一起时,显然可以将重复组合在一起,但我正在制作一个赢家页面,显示一堆累积奖金的获胜者,一些累积奖金有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
答案 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