Вернуться   Форум SAPE.RU > Общие вопросы > Разработка и сопровождение сайтов

-->
Ответ
 
Опции темы
Старый 20.03.2010, 14:26   #1
Специалист
 
Регистрация: 19.11.2009
Сообщений: 157
Вес репутации: 186
sylex - весьма и весьма положительная личностьsylex - весьма и весьма положительная личностьsylex - весьма и весьма положительная личность
По умолчанию Подскажите с SQL-запросом

Есть таблица новостей и таблица категорий. Каждая новость относится к одной категории. Структура стандартная - ид, заголовок, анонс, ид_категории, полный текст.

Собственно из таблицы новостей нужно выбрать по N (скажем 5) записей из каждой категории.

Т.е. что-то типа (для 3 категорий):

Код:
(SELECT * FROM news
WHERE `public` = 'Y' AND `cat` = 1
ORDER BY `id` DESC
LIMIT 5)

UNION

(SELECT * FROM news
WHERE `public` = 'Y' AND `cat` = 2
ORDER BY `id` DESC
LIMIT 5)

UNION

(SELECT * FROM news
WHERE `public` = 'Y' AND `cat` = 3
ORDER BY `id` DESC
LIMIT 5)
Только количество категорий у меня 20 штук Как сделать правильно?
sylex вне форума   Ответить с цитированием
Старый 20.03.2010, 20:51   #2
Специалист
 
Аватар для gobliin
 
Регистрация: 07.05.2008
Адрес: Н-ск
Сообщений: 254
Вес репутации: 214
gobliin - просто великолепная личностьgobliin - просто великолепная личностьgobliin - просто великолепная личностьgobliin - просто великолепная личностьgobliin - просто великолепная личностьgobliin - просто великолепная личностьgobliin - просто великолепная личностьgobliin - просто великолепная личность
Отправить сообщение для gobliin с помощью ICQ
По умолчанию

хранимыми процедурами можешь пользоваться?
gobliin вне форума   Ответить с цитированием
Старый 20.03.2010, 20:55   #3
Специалист
 
Регистрация: 19.11.2009
Сообщений: 157
Вес репутации: 186
sylex - весьма и весьма положительная личностьsylex - весьма и весьма положительная личностьsylex - весьма и весьма положительная личность
По умолчанию

gobliin, да могу, просто интересно было бы узнать, можно ли без них
sylex вне форума   Ответить с цитированием
Старый 20.03.2010, 21:00   #4
Новичок
 
Регистрация: 09.10.2009
Сообщений: 50
Вес репутации: 185
Paragelmen скоро станет известенParagelmen скоро станет известен
По умолчанию

Так а чем вариант, как в первом посте не подходит?
И при чем здесь хранимые процедуры?
Paragelmen вне форума   Ответить с цитированием
Старый 20.03.2010, 21:12   #5
Специалист
 
Аватар для gobliin
 
Регистрация: 07.05.2008
Адрес: Н-ск
Сообщений: 254
Вес репутации: 214
gobliin - просто великолепная личностьgobliin - просто великолепная личностьgobliin - просто великолепная личностьgobliin - просто великолепная личностьgobliin - просто великолепная личностьgobliin - просто великолепная личностьgobliin - просто великолепная личностьgobliin - просто великолепная личность
Отправить сообщение для gobliin с помощью ICQ
По умолчанию

Цитата:
Сообщение от Paragelmen Посмотреть сообщение
Так а чем вариант, как в первом посте не подходит?
И при чем здесь хранимые процедуры?
Вариант из первого поста эквивалентен выполнению нескольких запросов + не гибкий потому как количество категорий может не являться константой.
Написание хранимой процедуры более гибкий подход, и при вызове нужно указать всего лишь имя процедуры + возможно параметры.
gobliin вне форума   Ответить с цитированием
Старый 20.03.2010, 21:25   #6
Специалист
 
Регистрация: 05.06.2008
Адрес: Betelgeize
Сообщений: 247
Вес репутации: 209
edne - это имя известно всемedne - это имя известно всемedne - это имя известно всемedne - это имя известно всемedne - это имя известно всемedne - это имя известно всем
По умолчанию

Попробуй типа так:
SELECT * FROM table t1 WHERE t1.id IN
(SELECT t2.id FROM table t2
WHERE t1.idcat = t2.id
ORDER BY t2.id DESC
LIMIT 5)
Мускуля под рукой нет, поэтому не ручаюсь что будет то что нужно
edne вне форума   Ответить с цитированием
Старый 21.03.2010, 08:06   #7
Специалист
 
Регистрация: 19.11.2009
Сообщений: 157
Вес репутации: 186
sylex - весьма и весьма положительная личностьsylex - весьма и весьма положительная личностьsylex - весьма и весьма положительная личность
По умолчанию

edne, спасибо за попытку, но это что-то не то по-моему... в любом случае - у меня выдал ошибку, что данная версия MySQL не поддерживает LIMIT в подзапросах.

Цитата:
Сообщение от gobliin Посмотреть сообщение
Вариант из первого поста эквивалентен выполнению нескольких запросов + не гибкий потому как количество категорий может не являться константой.
совершенно верно!
sylex вне форума   Ответить с цитированием
Старый 21.03.2010, 08:18   #8
Эксперт
 
Аватар для Anadonam
 
Регистрация: 29.10.2009
Адрес: Вологда and SSHA
Сообщений: 3,897
Вес репутации: 358
Anadonam - прекрасное будущееAnadonam - прекрасное будущееAnadonam - прекрасное будущееAnadonam - прекрасное будущееAnadonam - прекрасное будущееAnadonam - прекрасное будущееAnadonam - прекрасное будущееAnadonam - прекрасное будущееAnadonam - прекрасное будущееAnadonam - прекрасное будущееAnadonam - прекрасное будущее
Отправить сообщение для Anadonam с помощью ICQ
По умолчанию

ну да хранимая процедура или вызывать запрос N раз из кода с подстановкой нужной категории (что имхо похоже )
Anadonam вне форума   Ответить с цитированием
Старый 21.03.2010, 12:06   #9
Специалист
 
Регистрация: 05.06.2008
Адрес: Betelgeize
Сообщений: 247
Вес репутации: 209
edne - это имя известно всемedne - это имя известно всемedne - это имя известно всемedne - это имя известно всемedne - это имя известно всемedne - это имя известно всем
По умолчанию

sylex, тогда можно покурить как вставить в подзапросе в group by выдачу номера строки, во внешнем having rownum<6, нет mysql под рукой, но работать будет медленнее из выбора группы
edne вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите по DLE NCom Разработка и сопровождение сайтов 15 10.09.2010 00:37
Googlebot палит сайты на продажноть? С запросом ?hren=linkopomoika HomoSAPEns Курилка 20 03.10.2009 00:43
Куча поисковых рефов с запросом "это пример страницы в wordpress. можно написать..." apple Курилка 3 24.08.2009 17:07
Проверка Яндексации запросом к кэшу яндекса Alexey Яндекс 10 21.08.2009 20:15
Подскажите mocarew Курилка 2 26.12.2008 18:46


Часовой пояс GMT +3, время: 01:58.