@morricone85

Получить иерархические данные из базы?

Здравствуйте!
Есть такие таблицы: categories, pages.
Задача: необходимо вывести страницы для "активных" категорий, напр. 10 страниц (активные - status = 1, не активные status = 0 ). Можно, сделать так:

1)
SELECT group_concat(t1.name ORDER BY t1.path SEPARATOR '/') AS parent,
group_concat(t1.seo ORDER BY t1.path SEPARATOR '/') as parent_url,
t2.id_categories, t2.name, t2.path, t2.status, categories,
FROM categories t1
JOIN categories t2 ON t2.path LIKE CONCAT(t1.path, '%' )   
JOIN pages ON categories = t2.id_categories AND pages.status = 1
GROUP BY t2.name, id_page
ORDER BY pages.date_created
LIMIT 10;


Получаем такие данные:

parent (Новости/Спорт);
parent_url('news/sport');
....
Минусы:
1. На сервере приходится дополнительно обрабатывать данные чтобы получить (Новости - news; Спорт - news/sport ).
2. Не понятно, как нормальным путем получать страницы, только для активных категорий.

2)
SELECT t1.name, t2.name, t1.status, t2.status, t1.seo, t2.seo,  categories
FROM categories t1
JOIN categories t2 ON t2.path LIKE CONCAT(t1.path, '%' )   
JOIN pages ON categories = t2.id_categories AND pages.status = 1
ORDER BY pages.date_created
LIMIT 10;


Минусы:
1) Limit - работает не так, как хотелось бы (выводит не 10 страниц, а 10 строк).
2) Тоже не понятно, как выводить страницы только для активных категорий. (указать в запросе AND t1.status =1 не будет правильно работать).

Как исправить данные минусы.
Спасибо.
  • Вопрос задан
  • 212 просмотров
Пригласить эксперта
Ответы на вопрос 1
dzheka3d
@dzheka3d
На самом деле, не совсем понятно что вам нужно. Вы хотите вывести статьи, которые лежат в активных категориях?
Вым просто нужен запрос типа:
SELECT p.* 
FROM `posts` p 
INNER JOIN `category` cat ON cat.`id` = p.`category_id` 
WHERE cat.`status` = 1
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы