簡體   English   中英

在Codeigniter中具有多個聯接的SUM排序

[英]Order by a SUM with multiple joins in codeigniter

解:

$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”的“時間”總數的總和排序

提前致謝

我建議改為通過$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));

它不是像$this->db->order_by("channel_id", "desc");一樣簡單嗎$this->db->order_by("channel_id", "desc"); 這將按channel_id的降序對結果進行排序。

假設問題中顯示的表名為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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM