我有一个具有这种结构的表:
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;
}
答案 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
但是,您无法在活动记录上构建此查询。希望这会有所帮助。