У меня есть небольшой блог-проект у меня 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
Вы можете получить все эти значения в одном запросе 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
Хранение значений Примечание: в списках, разделенных запятыми (например, ваши столбцы WRITERS
и CATEGORIES
), является плохой идеей и делает написание такого рода запросов проблематичным (только функция MySQL FIND_IN_SET
делает его работоспособным), и вам следует изучить правильную нормализацию ваших данных ( одно значение в строке). Здесь — это пример того, как ваша база данных может выглядеть нормализованной.
@user3356619 user3356619 вам понадобятся две дополнительные таблицы, posts_writers и posts_categories. См. db-fiddle.com/f/67sGFv3xcERojvypmjdF8/1
Любые советы о том, как использовать несколько категорий/авторов? Я думаю о создании четвертой таблицы для конкретных отношений, например post_id | ид_категории