имея довольно низкий уровень в sql, я прихожу за вашей помощью, потому что я заблокирован.
Итак, у меня есть база данных, содержащая мои 2 таблицы, таблицу статей и таблицу категорий. В моей таблице статей у меня есть поле, содержащее идентификаторы категорий, к которым он принадлежит, в формате JSON.
Схематично таблица категорий выглядит так:
| Name | id |
| Cat1 | 1 |
| Cat2 | 2 |
| Cat3 | 3 |
И в таблице артиклей:
| Title | id | Categories |
| Title1 | 1 | [1,2] |
| Title2 | 2 | [1,3] |
| Title3 | 3 | [2,3] |
В настоящее время я получаю свои статьи следующим образом:
SELECT *
FROM articles a
JOIN categories c
ON JSON_CONTAINS(a.categories, CAST(c.id AS CHAR))
Затем в php группирую их по категориям. Но я считаю, что это решение не очень чистое.
Поэтому я хотел знать, может ли SQL-запрос получить список статей, уже сгруппированных по категориям таким образом:
Cat1
- Статья 1
- Статья 2
cat2
- Статья 1
- Статья 3
Cat3
- Статья 2
- Статья 3
Здравствуйте, вы абсолютно правы, я поставлю промежуточную таблицу между моими двумя таблицами, чтобы избежать запятых.
затем опубликуйте правильную структуру данных, чтобы можно было правильно ответить на ваш вопрос






Лучше создать новую таблицу ArticleCategories, в которой перечислены все категории статей:
ArticleID, CatID
Если у ArticleID может быть несколько CatID ...
Теперь вы можете связать несколько категорий с одной статьей и легко искать в этой новой базе данных с помощью SQL корреляции между категориями и статьями.
SELECT c.category, STRING_AGG(a.title, ',')
FROM articles a
LEFT JOIN articleCategories ac
ON a.id = ac.articleID
LEFT JOIN categories c
ON c.id = ac.categoryID
GROUP BY c.category
Вот как многие люди решают этот вопрос. Есть, конечно, и другие способы, но они простые и эффективные.
Вношу доработки, потом возвращаюсь к вам, спасибо за ответ!
вы не должны использовать значения, разделенные запятыми, в столбцах .. вы должны нормализовать связанные данные