Получить данные из 3-х таблиц одним запросом

У меня есть небольшой блог-проект у меня 3 стола

Posts
PostID | TITLE | WRITERS(USERS) | CATEGORIES
1 | SOME TITLE | 1,2 | 1,2

USERS
USERID | USERNAME
1 | Alaa
2 | John

Categories
1 | Business
2 | Marketing

Я пытаюсь получить этот вывод

POST TITLE: SOME TITLE
Writers: Alaa And John
Categories: Business, And marketing

Обратите внимание, что я говорю об очень большом цикле, 100 постов на странице для многих зрителей
Итак, на данный момент у меня есть две идеи
Первая идея

1- take value from writers ( 1,2 )
2- Explode it by php
3- use mysql query to bring the writers
4- Do the same thing for categories

Вторая идея состоит в том, чтобы удалить записи столбцов, категории из таблицы сообщений и создать четвертую таблицу и назвать ее соединениями, которые будут ссылаться на идентификаторы друг друга (соединять все вместе). Но я даже не знаю, смогу ли я выполнить запрос mysql

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
28
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете получить все эти значения в одном запросе MySQL.

SELECT p.TITLE AS `Post Title`,
       GROUP_CONCAT(DISTINCT u.USERNAME) AS Writers,
       GROUP_CONCAT(DISTINCT c.CategoryName) AS Categories
FROM Posts p
JOIN Users u ON FIND_IN_SET(u.USERID, p.WRITERS)
JOIN Categories c ON FIND_IN_SET(c.Id, p.CATEGORIES)
GROUP BY p.TITLE

Выход:

Post Title  Writers     Categories
SOME TITLE  Alaa,John   Business,Marketing

Демо на dbfiddle

Хранение значений Примечание: в списках, разделенных запятыми (например, ваши столбцы WRITERS и CATEGORIES), является плохой идеей и делает написание такого рода запросов проблематичным (только функция MySQL FIND_IN_SET делает его работоспособным), и вам следует изучить правильную нормализацию ваших данных ( одно значение в строке). Здесь — это пример того, как ваша база данных может выглядеть нормализованной.

Любые советы о том, как использовать несколько категорий/авторов? Я думаю о создании четвертой таблицы для конкретных отношений, например post_id | ид_категории

user3356619 29.05.2019 04:18

@user3356619 user3356619 вам понадобятся две дополнительные таблицы, posts_writers и posts_categories. См. db-fiddle.com/f/67sGFv3xcERojvypmjdF8/1

Nick 29.05.2019 04:46

Другие вопросы по теме