codeigniter group by不起作用

时间:2016-09-06 18:59:45

标签: php codeigniter

我正在尝试制作存储在数据库中的事件的时间表:

db table

我在模型中使用此代码来获取数据

    $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

然而它显示如下

event list

如何正确显示?

2 个答案:

答案 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();