CodeIgniter中的“SELECT ... IN(SELECT ...)”查询

时间:2011-06-11 11:03:49

标签: codeigniter

我有类似的查询:

SELECT username 
FROM users 
WHERE locationid IN 
  (SELECT locationid FROM locations WHERE countryid='$')

$是我从最终用户获得的值。

如何在CodeIgniter中运行此查询?我在CodeIgnite的用户指南中找不到解决方案。

非常感谢您的回答!

问候!

4 个答案:

答案 0 :(得分:7)

here

基本上你必须做绑定参数:

$sql = "SELECT username FROM users WHERE locationid IN (SELECT locationid FROM locations WHERE countryid=?)"; 

$this->db->query($sql, '__COUNTRY_NAME__');

但是,就像Mr.E说的那样,使用连接:

$sql = "select username from users inner join locations on users.locationid = locations.locationid where countryid = ?"; 

$this->db->query($sql, '__COUNTRY_NAME__');

答案 1 :(得分:5)

另外,要注意 - Active Record Class也有$this->db->where_in()方法。

答案 2 :(得分:3)

请注意,这些解决方案使用Code Igniter Active Records Class

此方法使用您想要的子查询,但您应该自己清理$countryId

$this->db->select('username')
         ->from('user')
         ->where('`locationId` in', '(select `locationId` from `locations` where `countryId` = '.$countryId.')', false)
         ->get();

或者这种方法可以使用联接进行,并为您清理数据(推荐)!

$this->db->select('username')
         ->from('users')
         ->join('locations', 'users.locationid = locations.locationid', 'inner')
         ->where('countryid', $countryId)
         ->get();

答案 3 :(得分:2)

我认为你可以创建一个简单的SQL查询:

$sql="select username from user where id in (select id from idtables)";
$query=$this->db->query($sql);

然后你可以正常使用它。