Отображение подзаголовков в категории. PHP и MySQL

191
30 марта 2017, 22:40

У меня появился вопрос, как сделать так, чтобы на странице категории подгружались подзаголовки, под которыми уже отображались конечные статьи?

Сейчас MySql есть 2 связанные между собой таблицы: sections и articles.

Таблица section, допустим выглядит так

category_id | id | name
1 | 1 | n1
1 | 2 | n2
2 | 3 | n3
2 | 4 | n1
3 | 5 | n2
3 | 6 | n3

Таблица articles так:

id | section_id | name
1 | 1 | name1
2 | 1 | name2
3 | 2 | name3
4 | 2 | name4
5 | 3 | name5

Получается, что например страница категории 1 должна выглядеть следующим образом

Подзаголовок n1
статья name1
статья name2
Подзаголовок n2
статья name3
статья name4

Подзаголовки в разных категориях разные, стандартизировать их не получится. Понятно, что отображение статей для категории реализуется с помощью get параметров, но в данном случае их нет.
Пока получилось в каждой категории отобразить нужные подзаголовки, а дальше либо по одной статье везде (если объединять таблицы и использовать group by), либо, наоборот, в каждом подзаголовке все статьи из категории. А как отсортировать нужные ума не приложу, уже весь интернет перерыл.
Если нет готового варианта решения, то, как считаете, в какую сторону думать? У самого пока были идеи или вводить переменную, определяющую section_id, но как связать ее с mysql запросом? Или каким-нибудь способом использовать concat.
Самый-самый крайний вариант - это на каждую страницу добавить все возможные подзаголовки (всего штук 15-20, а на каждой странице 3-4) и не отображать те, для которых ничего не будет в таблице найдено. Но это фигня какая-то, да и тоже пока не очень понятно как реализовывать

Answer 1
SELECT sc.name, art.* FROM section AS sc
JOIN articles AS art ON art.section_id = sc.id
WHERE sc.category_id = 'Нужный id категории'
Answer 2
SELECT CONCAT('Подзаголовок ', name) name, /* id, */ 0
FROM section
WHERE category_id IN ( @category_id_list )
UNION ALL
SELECT CONCAT('статья ', articles.name), /* id, */ id
FROM section, articles
WHERE section.id = articles.id  
  AND section.category_id IN ( @category_id_list )
ORDER BY 2 /* , 3 */

Если на странице выводится несколько категорий - раскомментируй дополнительное поле.

READ ALSO
Сохранение сессии через AJAX

Сохранение сессии через AJAX

Допустим у нас есть 2 файла:

168
Использование системы пользователей WordPress в стороннем проекте

Использование системы пользователей WordPress в стороннем проекте

Необходимо реализовать доступ к стороннему проекту через систему пользователей WordPressПример: пользователь вводит данные от своего аккаунта...

181
Дизайн контента

Дизайн контента

Здравствуйте, использую движок FlexoCMS и для эстетической красоты на сайте решил сделать, блок новостей, задумка такая чтобы четные новости...

156
Проблема с циклической переадресацией

Проблема с циклической переадресацией

Нужно сделать так, чтобы сайт был доступен только с поисковиков, то есть по прямой ссылке запретить вход на сайтМне дали вот такой код:

158