@Sandev

Как организовать структуру категорий и постов?

К примеру имеем следующие данные:
Таблица category
|  id  |  name       |
|--------------------|
|  1   |  Драма      |
|  2   |  Комедия    |
|  3   |  Триллер    |


И есть ряд публикаций, пусть будет film
|  id  |  title     |
|-------------------|
|  1   |  Фильм1    |
|  2   |  Фильм2    |
|  3   |  Фильм3    |


Для их связи мне известны 2 метода:
1. Многие ко многим
2. Поле film.category в котором через запятую перечислять ID категорий

Со вторым методом проблем нету, а вот с первым возникли сложности и что-то я никак не могу сообразить как все же лучше сделать.
Т.е. создаю связывающую таблицу film_category
| film_id | cat_id |
|------------------|
| 1       | 1      |
| 1       | 2      |
| 2       | 1      |
| 2       | 2      |
| 2       | 3      |
| 3       | 2      |

И теперь задача в следующем, нужно вывести список фильмов и для каждого отобразить список его категорий.
Чтобы в результате получить что-то вроде такого:
| id | title  | category* |
|-------------------------|
| 1  | Фильм1 | 1,2       |
| 2  | Фильм2 | 1,2,3     |
| 3  | Фильм3 | 2         |

Что-то мне подсказывает, что возможно есть способ получить это с помощью чего-то вроде concat, но к сожалению моих знаний mysql для этого не достаточно :(

При этом примем ко вниманию, что данные из таблицы category были получены ранее и сформированы в массив:
$category = [
    '1' => 'Драма',
    '2' => 'Комедия',
    '3' => 'Триллер',
];


И вот суть вопроса в следующем, возможно ли как-то получить вышеуказанный результат? Чтобы был список фильмов и в каждом фильме были перечислены его категории.
Можно конечно получить одним запросом список фильмов, а затем в цикле вытягивать список категорий, но я подобное не рассматриваю в принципе.
  • Вопрос задан
  • 197 просмотров
Решения вопроса 1
0xD34F
@0xD34F
SELECT f.*, GROUP_CONCAT(fc.cat_id)
FROM film f
LEFT JOIN film_category fc ON fc.film_id = f.id
GROUP BY f.id
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы