Codeigniter查询链接
我正在Codeigniter中处理一个查询,我正在努力使它看起来干净。我甚至还没有添加大多数字段,我可以看到它变得很难处理,特别是使用select_sum 有没有一种更简洁的方式来书写它们或是将它们结合起来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
$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构建的最终查询是什么样子更容易。