Я немного недописал запрос, из-за этого и ошибка.
Нужна еще проверка по дополнительному полю, которое определяет выбор. Т.е. не просто по 5 в каждой группе, а например, по 5 последних по дате из каждой группы:
PHP:
select t1.id, t1.g, t1.dated
from tbl as t1
where 5 >= (
select count(*)+1
from tbl as t2
where t2.dated > t1.dated and t1.g = t2.g
)
order by t1.g, t1.dated desc
У меня сейчас этот запрос работает верно, т.е. именно так, как нужно.
Adelf, я не спорю о том, что твое предложение будет быстрее работать и использовать индексы потому как не могу сказать точно, что лучше, а что хуже
-~{}~ 30.01.10 06:34:
Все твои запросы без предварительной подготовки будут с плохим explain
А что можешь посоветовать, в плане подготовки?
И, кстати, последний мой запрос: его ведь можно использовать не для выборки данных, а для занесения ключей?
Т.е. cron будет выполнять:
PHP:
update tbl set orderkey=0 where orderkey=1// обнуление ключей
select t1.id // выбор id для установки ключей
from tbl as t1
where 5 >= (
select count(*)+1
from tbl as t2
where t2.dated > t1.dated and t1.g = t2.g
)
order by t1.g, t1.dated desc
update tbl set orderkey=1 where id in ($id) // установить ключи
А на сайте уже выбирать данные:
PHP:
select * from tbl where orderkey=1 order by t1.g, t1.dated desc
Добавить индекс на orderkey.
Или я не верно рассуждаю?
