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");

NB 表示されたテーブルの名前は times_table だと思いました。

于 2012-05-09T11:50:07.537 に答える