codeigniter选择不同的功能不起作用

时间:2013-08-28 22:55:30

标签: php mysql codeigniter

我有一个具有这种结构的表:

opinion_id,author_id,title,content

我想从表中获取所有最新记录,一份作者记录,这意味着每位作者的最新记录......

我的独特功能似乎不起作用......

 function getOpinions() {

     $data = array();
     $this->db->select('*');
     $this->db->from('opinions');
     $this->db->join('authors', 'opinions.author_id = authors.author_id');
     $this->db->order_by('date', 'desc');
     $this->db->distinct('author_id');

     $Q = $this->db->get();
     if ($Q->num_rows() > 0) {
         foreach($Q->result_array() as $row) {
             $data[] = $row;
         }
     }
     $Q->free_result();
     return $data;

 }

1 个答案:

答案 0 :(得分:3)

在Codeigniter中,distinct不按字段名称的方式工作。如果你look at the manual - 没有明确的论据。如果查看代码,它只需要一个布尔值,默认为true。它只是在DISTINCT关键字之后将SELECT关键字添加到查询中。就是这样。

在您的情况下,我认为最好使用GROUP BY $this->db->group_by('opinions.author_id');

希望通过在分组之前订购,订单依据您的需要工作。

干杯!

编辑 - 在OP评论后更新

我知道订购可能搞砸了 - 我有点提到它:) 无论如何,我可能会在这里假设你的一些表结构,但这会强制GROUP BY选择顶部的行。我假设日期在opinions表上,您只需要有作者详细信息的最新行。

SELECT * FROM `authors`
JOIN (
    SELECT * FROM opinions
    ORDER BY `date` DESC
) AS ops ON ops.author_id = authors.author_id
GROUP BY ops.author_id

但是,您无法在活动记录上构建此查询。希望这会有所帮助。