AND - чем можно заменить

niko42

Новичок
Здравствуйте.

Есть запрос:
PHP:
SELECT* FROM table WHERE id = 2 AND id = 4 AND id = 5 // и т.д.
Уточните, пожалуйста, чем можно заменить AND?
P.S. IN не подойдет, т.к. нужно все данные строго по запросу. Ибо получаем результат ибо он пуст
 

artoodetoo

великий и ужасный
ибо поле не может быть одновременно равно 2, 4 и 5
что-то у вас с логикой
 

niko42

Новичок
ибо поле не может быть одновременно равно 2, 4 и 5
что-то у вас с логикой
Ясно, буду знать как работает AND

Вопрос не много тогда в другом, как мне получить все элемнты удолетворяющему запросу, т.е. если хоть одно занчение не соответсвует, то возрщаем пустоту ибо возвращаем всё
 

artoodetoo

великий и ужасный
LOL. ну да, запрос удовлетворяет условию запроса.

niko42, что для вас "элементы"? Давайте использовать слова "поля" и "записи". С этим не будет проблем?
Сформулируйте задачу, пожалуйста.

p.s. Я не говорил, что запрос "не подойдет", я только объяснил почему он может возвращать только пустое множество и никак иначе. Возможно это и есть цель, я хз.
 

Вурдалак

Продвинутый новичок
Просто проверь число возвращённых строк и число id-шников, оно должно совпадать.
 

niko42

Новичок
Просто проверь число возвращённых строк и число id-шников, оно должно совпадать.
Спасибо за мысль! Но, к сожалению, не то....

Поясню более детально:
PHP:
CREATE TABLE IF NOT EXISTS `product_category` (
`product_id` int(11) NOT NULL,
`category_id` int(11) NOT NULL,
`position` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

INSERT INTO `product_category` (`product_id`, `category_id`, `position`) VALUES
(1, 1, 0),
(2, 1, 0),
(3, 1, 0),
(4, 2, 0),
(5, 2, 0),
(1, 2, 0),
(4, 2, 0);
Хочу получить все product_id у которых есть category_id = 1 AND category_id = 2

Тобишь ввиде такого результата: (1, 1, 0), (1, 2, 0)

P.S. я конечно могу вытащить их путем IN и сравнить, но один момент, что категорий может быть и 20 шт. или 100 и продуктов может быть более 1000
 
Последнее редактирование:

WMix

герр M:)ller
Партнер клуба
а если продукт находится в категориях 1, 2 и 3 он уже не подходит?
 

fixxxer

К.О.
Партнер клуба
Как ты вообще что-то программируешь, если не понимаешь разницу между AND и OR?
 

artoodetoo

великий и ужасный
Автор не сумел задать вопрос, а тема аналогичная уже была.
Дано: таблица-связка, задающая отношения многие-ко-многим. Уникальный ключ (a_id, b_id)
Надо найти те a_id, у которых есть все указанные b_id.

Никакого AND конечно не нужно, можно через OR или IN() что одно и то же.
Код:
SELECT `product_id`, COUNT(*)
FROM `product_category`
WHERE `category_id` IN(1, 2)
GROUP BY `product_id`
HAVING COUNT(*) = 2
http://sqlfiddle.com/#!2/2f430/3

Вурдалак фактически уже подсказал это :)
Просто проверь число возвращённых строк и число id-шников, оно должно совпадать.
 

niko42

Новичок
а если продукт находится в категориях 1, 2 и 3 он уже не подходит?
Один продукт может находится и в 20-ти категориях, главное что бы при запросе, данный продукт находился в категории и 1 и 2. И mysql отдавал только те продукты, которые соответствуют запросу. P.S. почему не могу сделать на уровне php, т.к. LIMIT еще предусмотрен......!
 

niko42

Новичок
Автор не сумел задать вопрос, а тема аналогичная уже была.
Дано: таблица-связка, задающая отношения многие-ко-многим. Уникальный ключ (a_id, b_id)
Надо найти те a_id, у которых есть все указанные b_id.

Никакого AND конечно не нужно, можно через OR или IN() что одно и то же.
Код:
SELECT `product_id`, COUNT(*)
FROM `product_category`
WHERE `category_id` IN(1, 2)
GROUP BY `product_id`
HAVING COUNT(*) = 2
http://sqlfiddle.com/#!2/2f430/3

Вурдалак фактически уже подсказал это :)
Большое спасибо!
 
Последнее редактирование:
Сверху