我从查询中得到以下一组结果:
name date_added
---- ---------
dan 15/11/2012
jane 15/11/2012
ted 14/11/2012
larry 13/11/2012
corben 13/11/2012
这些结果来自一个简单的MySQL查询,我显示结果,例如。
while($users = mysql_fetch_array($result)){
echo $users[name].' -- '.$users[date_added];
}
这会生成一个简单的列表,例如
dan -- 15/11/2012
jane -- 15/11/2012
ted -- 14/11/2012
larry -- 13/11/2012
corben -- 13/11/2012
我想要做的是从第一个开始,以不同的日期结束结果,例如
15/11/2012
dan -- 15/11/2012
jane -- 15/11/2012
14/11/2012
ted -- 14/11/2012
13/11/2012
larry -- 13/11/2012
corben -- 13/11/2012
日期每天都在变化,因为这是一个活文件,因此没有任何硬编码。
在while循环中有没有一种简单有效的方法呢?
答案 0 :(得分:0)
$dates = array();
while($users = mysql_fetch_array($result))
{
$key = $users['date_added'];
if (!isset($dates[$key])) $dates[$key] = array();
$dates[$key][] = $users[name].' -- '.$users[date_added];
}
// free mysql results
// then iterate $dates to print
foreach ($dates as $date=>$arr)
{
echo $date.'<br/>'.implode($arr).'<br/><br/>';
}
答案 1 :(得分:0)
你可以把它放在一个日期为键的数组中,然后像这样显示所有这些:
$users = array();
while ($user = mysql_fetch_array($result)) {
if (!isset($users[$user['date_added'])) $users[$user['date_added']] = array();
$users[$user['date_added']][] = $user['name'];
}
foreach ($users as $date => $names) {
echo $date . '<br />';
foreach ($names as $name) {
echo $name . '<br />';
}
echo '<br />';
}
您还可以更改查询,以便在日期对其进行排序,循环显示结果,并且每次日期与您打印日期之前的迭代不同。
答案 2 :(得分:0)
您可以使用mySQL DISTINCT ... Fx:
$dates = mysql_query("SELECT DISTINCT date_added FROM your_table ORDER BY date_added ASZ");
$user_date = array();
while ($row = mysql_fetch_array($dates)) {
array_push($user_date, $row['date_added']);
}
foreach ($user_date as $date) {
echo $date . '<br />';
$users = ("SELECT name, date_added FROM your_table WHERE date_added = '$date' ORDER BY date_added ASC");
while($row = mysql_fetch_array($users)) {
echo $row['name'] . ' -- ' . $row['date_added'] . '<br />';
}
}