Codeigniter查询链接

Codeigniter查询链接,codeigniter,Codeigniter,我正在Codeigniter中处理一个查询,我正在努力使它看起来干净。我甚至还没有添加大多数字段,我可以看到它变得很难处理,特别是使用select_sum 有没有一种更简洁的方式来书写它们或是将它们结合起来 $this->db->select('Map'); $this->db->select_sum('Kills')->select_sum('Deaths')->select_sum('Win')->select_sum('Loss')->sel

我正在Codeigniter中处理一个查询,我正在努力使它看起来干净。我甚至还没有添加大多数字段,我可以看到它变得很难处理,特别是使用select_sum

有没有一种更简洁的方式来书写它们或是将它们结合起来

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

原始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活动记录版本更可读。

我建议使用原始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 active record版本更具可读性。

我使用类似的方法:

$this->db->select("map_name")
     ->from("maptables")
     ->where("maptables.id",2);
对我来说,它是可读的:)


(我自己制作了一个类似于AR的库,因为AR有一些bug)

我使用类似的库,如下所示:

$this->db->select("map_name")
     ->from("maptables")
     ->where("maptables.id",2);
对我来说,它是可读的:)


(我自己制作了一个类似于AR的库,因为AR有一些bug)

我认为你也可以这样写,这样更可读

 $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();`
$this->db->select('Map,SUM(Kills),SUM(death),SUM(Win),SUM(Loss),SUM(Win+Loss,GP)');
$this->db->from('games')
$this->db->where('Name',$player\u 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(); 返回$query->result_array()`
我认为你也可以这样写,这样可读性更好

 $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();`
$this->db->select('Map,SUM(Kills),SUM(death),SUM(Win),SUM(Loss),SUM(Win+Loss,GP)');
$this->db->from('games')
$this->db->where('Name',$player\u 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(); 返回$query->result_array()`
那么,如何处理通过数字方式创建的查询呢?在这种情况下,使用CI的AR很舒服。是的,当然。这要看情况而定。我不反对使用CI的AR。我确实使用了它!当然,它有很多好处。有时,用纯SQL编写和读取查询要比在头脑中进行转换或调用
$this->db->last_query()
来发现AR构建的最终查询是什么样子更容易,这只是一个问题。那么,如何使用手工创建的查询呢?在这种情况下,使用CI的AR很舒服。是的,当然。这要看情况而定。我不反对使用CI的AR。我确实使用了它!当然,它有很多好处。有时,用纯SQL编写和读取查询要比在头脑中进行转换或调用
$this->db->last_query()
来发现AR构建的最终查询是什么样子更容易。