2

解决方案:

$query = $this->db->query("
   SELECT *, SUM(views.times) AS sum
   FROM channel
   RIGHT JOIN video
   ON channel.channel_id = video.channel_id
   LEFT JOIN user
   ON channel.user_id = user.user_id
   LEFT JOIN views
   ON channel.channel_id = views.channel_id
   GROUP BY channel.channel_name
   ORDER BY sum DESC
");

我有一个返回项目列表的查询。

function getfrontpage(){
    $this->db->select('*');
    $this->db->from('channel');     
    $this->db->join('video', 'channel.channel_id = video.channel_id' , 'right');
    $this->db->join('user', 'channel.user_id = user.user_id');
    $this->db->group_by("channel.channel_name"); 
    $query = $this->db->get();
    return $query->result();
}

现在我正在尝试使用另一个表中的 SUM 来订购这些,我该如何实现呢?

这是该表中的一张图片: 查看表

我希望结果按每个“channel_id”的“时间”总和进行排序

提前致谢

4

3 回答 3

2

我建议改为运行这个$this->db->query()

很高兴通过 CodeIgniters AR 函数获取简单的值。但是在某些情况下,构建查询字符串会更容易。

在你的情况下:

$query = $this->db->query("
SELECT channel_id, SUM(times) AS sum
FROM channel
GROUP BY channel_id
ORDER BY sum DESC
");

您还可以通过 db->query() 转义大多数值!

$this->db->query("
SELECT name
FROM table_name
WHERE id = ?
", array(1));
于 2012-05-09T11:49:30.063 回答
1

不是那么简单$this->db->order_by("channel_id", "desc");吗?这将按 channel_id 降序排列结果。

于 2012-05-09T11:37:34.590 回答
1

假设您的问题中显示的表名为 times_table,并且具有 user_id、channel_id 的键,您可以使用以下代码将 times_table 加入您的查询中,以便“times”列可供排序依据。

$this->db->join("times_table", "times.user_id=channel.user_id, times.channel_id=channel.channel_id", "left");
// You've already grouped by channel_name, so grouping by channel_id is probably not necessary.
$this->db->order_by("SUM(times_table.times) DESC");

注意我只是猜到您显示的表格的名称是times_table。

于 2012-05-09T11:50:07.537 回答