2012-02-24 9 views
1

私はCodeigniterのクエリに取り組んでいます。私はそれをきれいに保つために努力しています。私はまだフィールドのほとんどを追加していないし、特にselect_sumで扱いにくくなっているのがわかります。Codeigniter Query Chaining

よりクリーンな方法で記述したり、組み合わせる方法はありますか?

$this->db->select('Map'); 
$this->db->select_sum('Kills')->select_sum('Deaths')->select_sum('Win')->select_sum('Loss')->select_sum('Win + Loss', 'GP'); 
$this->db->from('games'); 
$this->db->where('Name', $player_name); 
$this->db->join('players', 'players.PlayerID = games.PlayerID'); 
$this->db->join('gameinfo', 'games.GameID = gameinfo.GameID'); 
$this->db->group_by('Map'); 
$this->db->order_by('Kills', "desc"); 
$this->db->limit(10); 

$query = $this->db->get(); 

return $query->result_array(); 
+0

は私にきれいなルックスより読みやすいです! –

答えて

3

Raw SQLは私の提案です。私の意見で

$name = $this->db->escape($player_name); 

$sql = " 
    SELECT Map, SUM(Kills), SUM(Deaths), SUM(Win), SUM(Loss), SUM(Win + Loss) AS GP 
    FROM games 
    JOIN players ON (players.PlayerID = games.PlayerID) 
    JOIN gameinfo ON (games.GameID = gameinfo.GameID) 
    WHERE Name = $name 
    GROUP BY Map 
    ORDER BY Kills DESC 
    LIMIT 10 
"; 

$query = $this->db->query($sql); 

return $query->result_array(); 

のみ、我々はかなりのインデントを作ることができれば、それははるかに読みやすいCIアクティブレコードバージョンよりもです。

+0

ディメンションで作成されたクエリはどうですか?この場合、CIのARを快適に使用できます。 – uzsolt

+0

はい、確かです。それはすべて依存している。私はCIのARを使用することに対して何もしていません。私はそれを使用します!確かに多くの利点があります。純粋なSQLでのクエリの作成や読み込みは、頭に変換を行うよりも、 '$ this-> db-> last_query()'を呼び出すだけで簡単にできます。 ARの最終的なクエリは次のようになります。 –

1

私はこのような類似の使用:それは読みやすいです私にとって

$this->db->select("map_name") 
    ->from("maptables") 
    ->where("maptables.id",2); 

:)

(私はARのような類似しない独自のライブラリを作った - ARは、いくつかのバグを持っているので)

0

あなたはまた、私の意見では、この方法でそれを書くことができますが、この

$this->db->select('Map, SUM(Kills), SUM(Deaths), SUM(Win), SUM(Loss), SUM(Win + Loss, GP)'); 
$this->db->from('games');<br /> 
$this->db->where('Name', $player_name);<br /> 
$this->db->join('players', 'players.PlayerID = games.PlayerID');<br /> 
$this->db->join('gameinfo', 'games.GameID = gameinfo.GameID');<br /> 
$this->db->group_by('Map');<br /> 
$this->db->order_by('Kills', "desc");<br /> 
$this->db->limit(10);<br /> 

$query = $this->db->get(); 

return $query->result_array();`