确定,
所以我有一个包含各种列的表,其中一列是我用来对数据库中的最新条目进行排序的日期列,例如:SELECT * FROM foo ORDER BY date DESC LIMIT 0,25
。这给了我最新的25个条目。
我想要的是在html中将一个日期的所有条目组合在一起,以便输出为:
<li class="date">Date 1.2.2014</li>
<li>Some Entry</li>
<li>Some Entry</li>
<li>Some Entry</li>
<li>Some Entry</li>
<li class="date">Date 1.1.2014</li>
<li>Some Entry</li>
<li>Some Entry</li>
容器无关紧要,无论如何都可以是<li>
,<td>
。
我想知道我是否可以通过某种查询在MYSQL中执行此操作,或者以这种方式获取结果所需的PHP逻辑。
此外,它应该是可扩展的,换句话说,如果我想要最新的50,100,1000条记录,那么需要更改的只是查询中的LIMIT
范围。输出将自动解析&#39;我想结果并在每次遇到新日期时添加日期标题。
谢谢,
答案 0 :(得分:2)
只需跟踪日期即可。如果更改,则输出新日期。
// The current date. Start with nothing.
$currentDate = '';
// Loop through your db results
while ($row = mysql_fetch_assoc($result)) {
// Check to see if the date of the current row is the same as previous row.
if ($currentDate !== $row['yourDateCol']) {
// echo out date
echo '<li class="date">'.$row['yourDateCol'].'</li>';
// save the current date in $currentDate to cehck in next loop iteration
$currentDate = $row['yourDateCol'];
}
// echo out event details
echo '<li>'.$row['yourEventCol'].'</li>';
}
答案 1 :(得分:0)
记住最后一次日期
$cur = null;
while($row = mysql_fetch_assoc($r)) {
if($row['date'] !== $cur) {
$cur = $row['date'];
echo "<li class="date">" . $row['date'] . "</li>\n";
}
echo "\t<li>" . $row['event'] . "</li>\n";
}
或者使用GROUP CONCAT在SQL中执行更多操作:
// SELECT date, GROUP_CONCAT(event SEPARATOR '</li><li>') AS entries FROM foo ORDER BY date DESC GROUP BY date LIMIT 25
while($row = mysql_fetch_assoc($r)) {
echo "<li class="date">" . $row['date'] . "</li><li>" . $row['entries'] . "</li>";
}
请注意,entries
将被截断为1024个字符,因此如果每个日期有大量事件,则不适用。我也建议不要这样做。
答案 2 :(得分:0)
你可以通过像这样的查询中的组连接来做到这一点(尽管它通常对于像ID这样的东西更好:
select yourDateField, groupConcat(id)
from someTable order by yourDateField desc limit 0,25
然后会返回如下数据:
2014-05-22
1, 2, 3, 4, 5
对于每一行,您可以在foreach语句中轻松爆炸。