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

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

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

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

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

textual
Листинг программы
  1. SELECT *
  2. FROM `table`
  3. WHERE
  4.  (`property` = 1 AND `value` = '8')
  5.  OR
  6.  (`property` = 4 AND `value` = '3')
  7. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы