Запрос с лимитом и join - вывести 10 категорий, узнать сколько их всего

Горбушка

Ищу её...
Регистрация
2 Май 2008
Сообщения
3.444
Реакции
2.524
Всем привет. Кажись, мой мозг начал разжизжаться и я превращаюсь в тупую блондинку.

Имеем список категорий, имеем список новостей. Требуется вывести 10 категорий, узнать сколько их всего (для создания навигации) и вывести все новости в каждой из категорий. Категорий много, новостей в каждой - 1-10, не больше.

Ккк это сделать м наименьшей нагрузкой на сервер?
 
SELECT name_cat FROM table1 LIMIT 10

Идиотизм!!!!
Требуется вывести 10 категорий, узнать сколько их всего и >>>>вывести все новости в каждой из категорий<<<<.

Ты правда думаешь, что программист, написавший свою CMS, решающий 90% проблем с DataLife Engine, проработавший саппортом около 5 лет не знает, что в SQL есть LIMIT???? Я тебе больше скажу, ты и 1/3 проблемы не решил этим запросом. Как минимум это делается через COUNT(*), а лучше через SQL_CALC_FOUND_ROWS()... Но никак не "SELECT name_cat FROM table1 LIMIT 10". И даже SQL_CALC_FOUND_ROWS не решает проблему вывода всех новостей...
 
Последнее редактирование модератором:
Я думаю это одним запросом не решить (вернется же плоская таблица, а здесь данные разные). Или же решить, но при этом подключить уже логику приложения.

Я бы попробовал так и категории уже "слепил и подсчитал" на стороне клиента:

Код:
SELECT
  `t1`.`id`,
  `t1`.`catid`,
  `t1`.`title`,
  COUNT(*) AS `counter`
FROM `news` `t1` JOIN `news` `t2` ON `t1`.`catid` = `t2`.`catid` AND `t1`.`id` >= `t2`.`id`
GROUP BY `t1`.`catid`, `t1`.`id`
HAVING `counter` <= 10
ORDER BY `t1`.`catid`, `t1`.`id`;

Так ты выведешь не более 10 новостей, но из каждой категории, в которой они есть, не потеряв ни одной. А на стороне клиента перебрать записи и просуммировать уникальные категории. Сюда же можно приджойнить таблицу категорий.

Если тебе нужны все категории, включая пустые - то лучше просто селектнуть всю таблицу категорий.
 
Сделал давно 1 запросом через дублирование полей...
 
А что прикладывать? Я в 1 таблицу запихнул копию данных другой и всё... Правда дикий перерасход места...
 
Нужно просто использовать NESTED SETS для хранения иерархии тогда будет все быстро работать.
 
Назад
Сверху