Запрос "SELECT ... IN (SELECT ...)" в CodeIgniter - PullRequest
5 голосов
/ 11 июня 2011

У меня есть запрос, похожий на этот:

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

$ - это значение, которое я получаю от конечного пользователя.

Как я могу выполнить этот запрос в CodeIgniter? Я не могу найти решение в руководстве пользователя CodeIgnite.

Большое спасибо за ваши ответы!

Привет!

Ответы [ 4 ]

7 голосов
/ 11 июня 2011

Смотри здесь .

В основном вы должны сделать параметры связывания:

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

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

Но, как сказал мистер Е., используйте соединения:

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

$this->db->query($sql, '__COUNTRY_NAME__');
5 голосов
/ 10 апреля 2012

Также следует отметить, что Класс активной записи также имеет метод $this->db->where_in().

3 голосов
/ 11 июня 2011

Обратите внимание, что в этих решениях используется класс активных записей Code Igniter

Этот метод использует подзапросы, как вы хотите, но вы должны очистить $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();
2 голосов
/ 11 июня 2011

Я думаю, что вы можете создать простой запрос SQL:

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

и затем вы можете использовать его как обычно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...