Запрос на выборку, по нескольким параметрам - MySQL
Формулировка задачи:
Есть таблица:
В ней к примеру 3 значения:
Как выбрать `parent` = 5, зная что property может быть 1 или 4 и что value может быть 8 или 3 ? Записи у которых `parent` = 5
Пробую так:
Но так не срабатывает, а через OR:
Выбирает лишнее, т.е. захватывает еще parent = 7, это понятно почему.
Как построить запрос?
CREATE TABLE `table` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `property` INT(11) NOT NULL DEFAULT '1', `parent` INT(11) NOT NULL DEFAULT '1', `value` VARCHAR(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `table` (`id`, `property`, `parent`, `value`) VALUES (1, 1, 5, '8'), (2, 4, 5, '3'), (14, 4, 7, '3'),
SELECT * FROM `table` WHERE (`property` = 1 AND `value` = '8') AND (`property` = 4 AND `value` = '3') GROUP BY `parent`
SELECT * FROM `table` WHERE (`property` = 1 AND `value` = '8') OR (`property` = 4 AND `value` = '3') GROUP BY `parent`
Решение задачи: «Запрос на выборку, по нескольким параметрам»
textual
Листинг программы
SELECT * FROM `table` WHERE (`property` = 1 AND `value` = '8') OR (`property` = 4 AND `value` = '3') GROUP BY `parent` having count(*)=2;
Объяснение кода листинга программы
SELECT *
— Запрос на выборку всех полей из таблицы.FROM
table`` — Указание названия таблицы, из которой производится выборка.WHERE
— Условие, которое должно выполняться для каждой строки, чтобы она была выбрана.(
— Начало условия в виде логического выражения.property
— Название поля, с которым производится сравнение.= 1
— Значение поля, с которым сравнивается значение 1.AND
— Логический оператор, связывающий два условия.value
— Название поля, с которым производится сравнение.= '8'
— Значение поля, с которым сравнивается значение '8'.OR
— Логический оператор, связывающий два условия.(
— Начало условия в виде логического выражения.property
— Название поля, с которым производится сравнение.= 4
— Значение поля, с которым сравнивается значение 4.AND
— Логический оператор, связывающий два условия.value
— Название поля, с которым производится сравнение.= '3'
— Значение поля, с которым сравнивается значение '3'.)
— Конец условия в виде логического выражения.GROUP BY
parent` — Сгруппировать результаты выборки по полю
parent`.HAVING count(*)=2
— Ограничение на выборку только тех строк, количество которых равно 2.;
— Конец запроса.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д