Как правильно написать SQL-запрос с "ГДЕ" и "IN" - PullRequest
0 голосов
/ 05 октября 2011

Я хочу выбрать записи, содержащие данный идентификатор и данную ветвь, поэтому я пришел к этому запросу, и я хочу знать, является ли это правильным способом написать это

im с использованием codeigniter

$orderids = array('2', '3');
$branch = array('branch1', 'branch2');

$this->db->where_in('order_id', $orderids);
$this->db->where_in('branch', $branch);
$query = $this->db->get('tbl_order_data'); 

это делает запрос

SELECT *
FROM (`tbl_m_order_collection_data`)
WHERE `order_id` IN ('2', '3')
AND `branch` IN ('branch1', 'branch2') 

моя таблица выглядит как

+----+----------+-------------+-----------+
| ID | order_id | branch      | item_code |
+----+----------+-------------+-----------+
|  1 |        1 | branch1     | 4R1       |
|  2 |        1 | branch2     | 4R11      |
|  3 |        1 | branch2     | ACS20x20  |
|  4 |       *2 | branch1     | ACS20x27  |
|  5 |       *2 | branch1     | ACS20x20  |
|  6 |        1 | branch1     | ACS20x20  |
|  7 |        2 | branch2     | ACS20x27  |
|  8 |       *3 | branch2     | ACS20x20  |
+----+----------+-------------+-----------+

, что я пытаюсь получить отмеченные звездочкой записи из таблицы.поэтому приведенный выше запрос действителен для использования?

Ответы [ 3 ]

1 голос
/ 05 октября 2011

Из комментариев кажется, что вы хотите знать, как работает IN.

Простой ответ заключается в том, что IN ищет значения, указанные перед словом в массиве после слова

Пример один:

'banana' IN ('apple','orange','banana')

Это дает истину.

Пример два:

1234 IN ('hello','world!')

Это дает ложь.

Вы можете узнать больше о IN здесь

И является логическим оператором и выдает значение «истина» только в том случае, если операторы с обеих сторон верны. Как это:

true  AND true = true

false AND true = true AND false = false

Если мы скомбинируем пример один и два, мы получим:

'banana' IN ('apple','orange','banana')
AND
1234 IN ('hello','world!')

Так как Пример один был верным, но второй пример был ложным, это вернется как ложный.

0 голосов
/ 05 октября 2011

Да, это правильный способ сделать это.Вы можете сделать это намного более кратким, соединяя методы вместе:

$query = $this->db
    ->where_in('order_id', $orderids)
    ->where_in('branch', $branch)
    ->get('tbl_order_data');
0 голосов
/ 05 октября 2011

Ваше WHERE предложение ..

WHERE `order_id` IN ('2', '3') AND `branch` IN ('branch1', 'branch2')

.. можно читать на английском языке как "Записи, чьи order_id равны '2' или '3', а чьи branch равны 'branch1' или 'branch2.' '

Другими словами, это примерно эквивалентно:

WHERE (`order_id` = '2' OR `order_id` = '3')
  AND (`branch` = 'branch1' OR `branch` = 'branch2')

Преимущество WHERE ... IN заключается в том, что вы можете указывать множество различных значений, например, order_id IN ('2', '3', '4', '5'), и вы можете даже поставить SELECT (подзапрос) после IN, чтобы увидеть, находится ли значение "в" наборе, возвращенном подзапросом.

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