我正在尝试制作存储在数据库中的事件的时间表:
我在模型中使用此代码来获取数据
$query = $this->db->select('*');
$query = $this->db->group_by('data');
$query = $this->db->order_by('data', 'desc');
$query = $this->db->get('istorija');
return $query->result();
然后输出代码i view
<?php
foreach($istorija as $info) {
?>
<li class="time-label">
<span class="bg-red"><?php echo ucfirst(strftime("%B %e, %Y", $info->data)); ?></span>
</li>
<li>
<i class="fa fa-<?php echo $info->ikona; ?> bg-<?php echo $info->fonas; ?>"></i>
<div class="timeline-item">
<span class="time"><i class="fa fa-clock-o"></i> <?php echo strftime("%H:%M", $info->data); ?></span>
<h3 class="timeline-header"><a href="#"><?php echo $info->pavadinimas; ?></a></h3>
<div class="timeline-body">
<?php echo nl2br($info->tekstas); ?>
</div>
</div>
</li>
<?php
}
?>
我期望它按日期和日期内的事件呈现视图,即
[date 1]
- event 1
- event 2
[date 2]
- event 1
然而它显示如下
如何正确显示?
答案 0 :(得分:1)
Group By完美无缺,正如您刚才所展示的那样。如果按照没有重复数据的列进行分组,则无需分组。您的所有数据记录都不同。
鉴于您没有在数据库中使用日期字段,但由于某种原因存储了php时间戳,这看起来有点奇怪,如果您有两个时间戳足够相同,我会感到惊讶有任何影响。
鉴于您显示的数据,您不需要该组,即使使用日期字段,它也无法按预期方式工作。
收集数据并按升序时间戳排序。然后在你的显示中只需为你要显示的当前日期设置一个temp_date变量,即2016年9月6日。然后在循环的下一次迭代中,检查日期是否已更改,如果有,则显示新的date,设置temp变量并继续循环。类似的东西:
<?php
$temp_date = '';
foreach($istorija as $info)
{
$this_date = ucfirst(strftime("%B %e, %Y", $info->data);
if ($this_date != $temp_date)
{
$temp_date = $this_date;
// output your date header
....
}
// output your date listing
....
}
?>
希望有所帮助,
保罗。
答案 1 :(得分:0)
未经测试,但使用几个mysql函数可能会起作用。您不能使用*作为选择,因此您必须单独列出字段。 select()
的第二个参数设置为FALSE
,以防止自动转义,这将破坏此SQL语法。
您只需指定$query
等于$this->db->get('istorija');
$this->db->select("id, data, DATE_FORMAT(FROM_UNIXTIME(`data`), '%B %e, %Y') AS data_str, ikona, fonas, pavadinimas ,tekstas", FALSE);
$this->db->group_by('data_str');
$this->db->order_by('data', 'desc');
$query = $this->db->get('istorija');
return $query->result();