2012-05-09 6 views
1

ソリューションを結合します。注文はCodeIgniterの中

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を別のテーブルから注文しようとしていますが、どうすればいいですか?ここで

は、そのテーブルからの画像です: view table

私は結果が事前に

おかげ

答えて

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->クエリを通じてほとんどの値をエスケープすることができます)!

$this->db->query(" 
SELECT name 
FROM table_name 
WHERE id = ? 
", array(1)); 
+0

そして、このクエリが何であるべきか教えていただけますか?私の照会スキルはそれほど良いものではありません。私は前にSUMを使ったことはありません。 – Kozmk12

+0

どのテーブルのどの列からSUM()を使いますか? –

+0

時間=(117 + 1)が最高であるため、上記の画像のように、チャンネルの「時間」の合計でチャンネルを並べ替えるようにしたい場合は、 – Kozmk12

1
それぞれ「CHANNEL_ID」のための「時間」の合計の合計によってソートしたいです

$this->db->order_by("channel_id", "desc");と同じくらい単純ではありませんか?これは、結果をchannel_idで降順で並べ替えます。

+0

私はあなたが私を誤解したと思うので、各チャンネルの行「回数」の数字の合計を注文する必要があります。したがって、times =(117 + 1)が最も高い数字なので、最初はchannel = 21となります。 – Kozmk12

1

times_tableと呼ばれ、USER_IDの鍵を持っている、CHANNEL_IDされるあなたの質問に表示されたテーブルを想定すると、「時間」の欄はソートする利用可能であるので、あなたはあなたのクエリにtimes_tableに参加するために、次のコードを使用することができます。

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

N.B.私はあなたの表示されたテーブルの名前がtimes_tableだと推測しました。