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

意见编号,作者编号,标题,内容

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

我独特的功能似乎无法正常工作...

 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;

 }

最佳答案

在Codeigniter中,distinc不能按您期望的字段名称那样工作。如果您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


但是,您将无法在活动记录上构造此查询。希望这可以帮助。

关于php - Codeigniter选择独特功能不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18499629/

10-11 12:57