Многие ко многим - примеры запросов - MySQL

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

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

Здравствуйте уважаемы! Пытаюсь организовать мультикатегории для новостей, но пока не понял, как составлять запросы... Напишите пожалуйста примеры запросов с JOIN: 1. Каким запросом выбрать все новости и вывести к ним категории через запятую. Если категория не присвоена для новости, то она также выводится, просто не указана категория. 2. Выборка новостей по нескольким категориям categories.id IN (1,3). 3. Выборка по pages.id - вывод новости с категориями через запятую. 4. Изменение категорий у новости. 5. Удаление категории, которая присвоена к нескольким новостям. 6. Удаление новости, для которой присвоены несколько категорий.

pages

:
id title
1 Новость_1
2 Новость_2
3 Новость_3

categories

:
id title parent
1 Категория_1 0
2 Категория_2 0
3 Категория_3 0

page_cat

:
idp idc
1 2
1 3
2 1
Пока что я реализовал мультикатегории добавив поле pages.id_cats, в котором через запятую прописаны id категорий. Но читая Гугл я понял, что так делать не хорошо. Заранее благодарен!

Решение задачи: «Многие ко многим - примеры запросов»

textual
Листинг программы
SELECT p.*, GROUP_CONCAT(c.id, ', ') id_category, GROUP_CONCAT(c.title, ', ') title_category
FROM (SELECT DISTINCT p1.* FROM page_cat pc1 JOIN pages p1 ON pc1.idp = p1.id WHERE pc1.idc = 4) p
LEFT JOIN page_cat pc ON p.id_page=pc.idp
LEFT JOIN categoryes c ON c.id=pc.idc
GROUP BY p.id
LIMIT 5

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

В данном коде выполняется запрос к базам данных, используя язык SQL. Код выполняет следующие действия:

  1. Выполняется запрос к таблице page_cat, чтобы получить уникальные значения id из таблицы pages, которые относятся к категории с idc равным 4. Это делается с помощью подзапроса SELECT DISTINCT p1.* FROM page_cat pc1 JOIN pages p1 ON pc1.idp = p1.id WHERE pc1.idc = 4 и оператора DISTINCT.
  2. Затем результаты этого запроса (который включает id и id_page из таблицы pages) присоединяются к таблице categoryes с помощью оператора LEFT JOIN, используя id_page как ключ.
  3. Далее, результаты этого запроса группируются по id_page с помощью оператора GROUP BY.
  4. Затем, для каждой группы, используется функция GROUP_CONCAT, чтобы объединить значения id и title из таблицы categoryes в строку, разделенную запятыми.
  5. Наконец, результаты всего этого запроса ограничиваются первыми 5 строками с помощью оператора LIMIT. Список действий в коде:
  6. Выполняется подзапрос для получения уникальных значений id из таблицы pages, относящихся к категории с idc равным 4.
  7. Результаты подзапроса присоединяются к таблице categoryes с помощью оператора LEFT JOIN.
  8. Результаты присоединения группируются по id_page с помощью оператора GROUP BY.
  9. Для каждой группы, используются функции GROUP_CONCAT, чтобы объединить значения id и title из таблицы categoryes в строку, разделенную запятыми.
  10. Результаты всего запроса ограничиваются первыми 5 строками с помощью оператора LIMIT.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

9   голосов , оценка 3.889 из 5