Булевы операторы в MySQL - PullRequest
2 голосов
/ 01 июня 2011

У меня есть список элементов (разделенных запятой), которые мне нужно найти в базе данных. Сначала я просматривал каждый код товара по отдельности, но должен быть более простой способ сделать это.

Я играл в phpMyAdmin, пытаясь выбрать элементы без удачи.

SELECT * 
FROM  `items` 
WHERE  `code` = ( 20298622
OR 83843296 
OR 46549947 ) 

Результаты не возвращены.

SELECT * 
FROM  `items` 
WHERE  `code` =20298622
OR 83843296 
OR 46549947 

Возвращает каждый элемент в базе данных.

Я читал документы по MySQL, и кажется, что OR (или ||) должно делать то, что я ищу. Где я ошибся?

Кроме того, FWIW, code является целочисленным полем.

Спасибо!

Ответы [ 3 ]

4 голосов
/ 01 июня 2011

Вы можете использовать ...

SELECT * 
  FROM `items` 
 WHERE `code`
    IN (20298622,
        83843296, 
        46549947)
2 голосов
/ 01 июня 2011

Причина сбоя заключается в том, что оператор OR разделяет два условных оператора. Следовательно, ваш первый условный оператор будет оценивать (code = 20298622), а затем ваш следующий оператор будет просто числом. Если вы хотите использовать оператор OR, вам нужно будет снова указать имя столбца. Вот как это будет выглядеть:

SELECT * 
FROM  `items` 
WHERE  `code` = 20298622
OR `code` = 83843296 
OR `code` = 46549947 

Вы также можете использовать более сложные операторы, такие как IN, или даже объединить вторую таблицу (даже временную таблицу). В принципе, есть много способов сделать это. Вам просто нужно выбрать, какой из них лучше всего подходит для вашей ситуации (скорость, простота использования и т. Д.)

1 голос
/ 01 июня 2011

Вы не используете правильный синтаксис. Вы должны изменить утверждение на:

SELECT * 
FROM `items` 
WHERE `code` = 20298622
    OR `code` = 83843296 
    OR `code` = 46549947

Или, как @alex отмечает в своем ответе, вы можете использовать предложение IN:

SELECT *
FROM `items` 
WHERE `code` IN (20298622, 83843296, 46549947)
...