![]() |
|
Модераторы: skyboy |
![]()
|
|
| hetfield |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 26.11.2007 Репутация: нет Всего: нет |
Добрый день. Есть таблица с новостями сайта. Все новости делятся на 10 категорий. То есть пример:
id cat_id title 1 2 заголовок новости 2 7 второй заголовок новости Как мне за один (желательно) select вытащить по три последние новости с каждой категории... |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
однако ж, скорее всего у вас MySQL, а он не поддерживает синтаксиса SQL2003 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| hetfield |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 26.11.2007 Репутация: нет Всего: нет |
Да, MySQL. То есть ваш вариант там не сработает? А аналог для MySQL? )
|
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
Можно и для MySQL и "одним запросом", но, думаю, вам следует отказаться от задумки получить это одним запросом непосредственно из таблицы новостей, а готовить новости для отображения загодя, непосредственно при добавлении оных. Кстати, весьма не тривиальная задача, есть о чем подумать, при условии, если новости могут добавляться в конкурентном режиме. Либо же из PHP в цикле обхода курсора по категориям, дергать по три записи из новостей, что, мне кажется, будет попроще.
Это сообщение отредактировал(а) Zloxa - 23.1.2012, 14:02 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| hetfield |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 26.11.2007 Репутация: нет Всего: нет |
А почему советуете отказаться? "Тяжелый" запрос получается?
Вы предлагаете, к примеру, сделать еще одну таблицу, в которую добавлять по мере создания новостей по три с каждой категории и потом уже спокойно одним запросом их брать с этой таблицы? |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
Тем тяжелее, чем больше объемы. Если же роста объемов не предполагается, то вполне себе решение. или же брать не одним запросом, а дергать по три записи для каждой категории. Но тут я толком не знаю сможет ли MySQL эффективно использовать составной индекс для сортировки по убыванию. Это сообщение отредактировал(а) Zloxa - 23.1.2012, 14:17 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| hetfield |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 26.11.2007 Репутация: нет Всего: нет |
В моем случае 10 отдельных запросов. Это первое о чем я подумал, но мне кажется что так будет "тяжелей", чем ваш вариант
Объясните что это, если не сложно? ) |
||||
|
|||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
Как можно объяснить то- чего не знаешь? Я уже не в первый раз делился этими сомнениями на этом форуме, но пока никто моих сомнений не развеял. В вашем случае, если id определяет степень новизны новости, то для того, чтобы выбрать три наиболее новых новости по категории, было бы целесообразно использовать индекс по паре (cat_id,id). Если MySQL сумеет запрос "select * from news where cat_id = :cat_id order by id desc limit 3" свести к сканированию индекса по убыванию начиная со старшего id для заданной категории, с условием выхода по отбору трех записей, то снижение производительности 10 ваших запросов окажется не существенным даже при весьма и весьма существенном увеличении объемов. Только вот я не знаю умеет ли так мася. Оракл, знаю - умеет. А масю я в глаза не видывал. Это сообщение отредактировал(а) Zloxa - 23.1.2012, 14:35 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| hetfield |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 26.11.2007 Репутация: нет Всего: нет |
В общем буду что-то пробовать. ) Спасибо за советы ))
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Составление SQL-запросов | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |