Запрос на выборку, по нескольким параметрам - MySQL

Узнай цену своей работы

Формулировка задачи:

Есть таблица:
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;
В ней к примеру 3 значения:
INSERT INTO `table` (`id`, `property`, `parent`, `value`) VALUES
(1, 1,  5,  '8'),
(2, 4,  5,  '3'),
(14,    4,  7,  '3'),
Как выбрать `parent` = 5, зная что property может быть 1 или 4 и что value может быть 8 или 3 ? Записи у которых `parent` = 5 Пробую так:
SELECT *
FROM `table`
WHERE 
 (`property` = 1 AND `value` = '8')
 AND
 (`property` = 4 AND `value` = '3')
GROUP BY `parent`
Но так не срабатывает, а через OR:
SELECT *
FROM `table`
WHERE 
 (`property` = 1 AND `value` = '8')
 OR
 (`property` = 4 AND `value` = '3')
GROUP BY `parent`
Выбирает лишнее, т.е. захватывает еще parent = 7, это понятно почему. Как построить запрос?

Решение задачи: «Запрос на выборку, по нескольким параметрам»

textual
Листинг программы
SELECT *
FROM `table`
WHERE 
 (`property` = 1 AND `value` = '8')
 OR
 (`property` = 4 AND `value` = '3')
GROUP BY `parent` having count(*)=2;

Объяснение кода листинга программы

  1. SELECT * — Запрос на выборку всех полей из таблицы.
  2. FROMtable`` — Указание названия таблицы, из которой производится выборка.
  3. WHERE — Условие, которое должно выполняться для каждой строки, чтобы она была выбрана.
  4.  ( — Начало условия в виде логического выражения.
  5. property — Название поля, с которым производится сравнение.
  6. = 1 — Значение поля, с которым сравнивается значение 1.
  7. AND — Логический оператор, связывающий два условия.
  8. value — Название поля, с которым производится сравнение.
  9. = '8' — Значение поля, с которым сравнивается значение '8'.
  10. OR — Логический оператор, связывающий два условия.
  11. ( — Начало условия в виде логического выражения.
  12. property — Название поля, с которым производится сравнение.
  13. = 4 — Значение поля, с которым сравнивается значение 4.
  14. AND — Логический оператор, связывающий два условия.
  15. value — Название поля, с которым производится сравнение.
  16. = '3' — Значение поля, с которым сравнивается значение '3'.
  17. ) — Конец условия в виде логического выражения.
  18. GROUP BYparent` — Сгруппировать результаты выборки по полюparent`.
  19. HAVING count(*)=2 — Ограничение на выборку только тех строк, количество которых равно 2.
  20. ; — Конец запроса.

Оцени полезность:

5   голосов , оценка 3.6 из 5
Похожие ответы