Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > выборка по трем таблицам.


Автор: enoff 15.12.2010, 11:20
Есть три таблицы:
_____________
news_categories |
----------------------
id | title | order   |
----------------------
по полю order(int) категории сортируются.

_______________________________
news_feeds                                           |            
--------------------------------------------------
id | category_id | title | feed_url | open   |
--------------------------------------------------

_________________________________
news                                                        |
----------------------------------------------------
id | feed_id | category_id | title | url | date |
----------------------------------------------------

Вот примерная структура таблиц.
Плюс к этому нужго еще одно полу в таблице news - дата. Назовем пока `open_date`. Объясню дальше.

Нужно выбрать пять новостей из каждой категории, у которых у feed'а open=1 и отсортировать их по дате. Если `open_date` не NULL и не менее текущей даты, то эта новость должна присутствовать в результате выборки.

Категорий всего 50. Новостей - таблица каждый день пополняется на 10 000 записей. + в таблицах дополнительные текстовые поля.
В цикле перебирать категории и делать запросы, кажется, не лучшее решение.

Вариантов у меня 1:
создать дополнительную таблицу `news_main`(`news_id`, `open_date`) где будут все требуемые новости.
Записей постоянно будет 250. Перестраиваться таблица будет раз в 10 минут (периодичность подгружения новостей). Плюс изредка незначительные изменения при действиях в админке.
На выборку затраты будут минимальны, на изменение тоже высокой нагрузки не будет.

Каким путем лучше пойти?
Интересует меня первый вариант. Как выбрать по пять новостей из каждой категории с этими условиями? (открыт ли фид, `open_date`, сортировка по `date`)?

Автор: enoff 15.12.2010, 13:35
и новое условие. В таблице `news_feeds` поле `region`.
Плюс в вышесказанному, нужно выбрать не по пять из категории, а по пять из одной категории для каждого региона.
Вобщем, мне малореальным представляется это сделать без доп. таблицы, сделаю еще одну.

Но за подсказки других вариантов, или как можно сделать без новой таблицы, буду рад smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)