LINUX.ORG.RU

Запрос к БД хитрый надо сделать...


0

1

Есть БД

+-----+------+------+

| UID | RATE | TIME |

+-----+------+------+

Куда раз в день пишутся данные id пользователя,его рейтинг и его данные - всё в одну кучу - и тут возникает задачка: Как вывести десятку пользователей за последний день то?

★★★

Последнее исправление: chapay (всего исправлений: 1)

>Куда раз в день пишутся данные id пользователя,его рейтинг и его данные - всё в одну кучу - и тут возникает задачка: Как вывести десятку пользователей за последний день то?

SELECT * FROM t WHERE TIME > now-24h ORDER BY RATE LIMIT 10

или я что-то не понимаю?

drBatty ★★
()
Ответ на: комментарий от Zhbert

Ключевая проблема что всё пишется в одну базу и там хранятся данные и за вчера и за сегодня и за год назад.

И если просто вывести по популярности то может оказаться что в списке user1 с рейтингом на сегодня и user1 с рейтингом на вчера

chapay ★★★
() автор топика

нужен рефакторинг кода

xhat
()
Ответ на: комментарий от nnz

я тоже туплю, но насколько я понял задача стоит в том, чтобы вывести список людей кто набрал наибольший за 24 часа. Такой запрос выведет как вы понимаете топ-10 скора за все время, а что обозначает табличка TIME - это для меня загадка. в общем жду ТС с разяснением

xhat
()
Ответ на: комментарий от chapay

>Ключевая проблема что всё пишется в одну базу и там хранятся данные и за вчера и за сегодня и за год назад.

дык я-же вам их отфильтровал WHERE TIME > now-24h, т.е. только за последние 24часа.

drBatty ★★
()
Ответ на: комментарий от nnz

>ORDER BY RATE DESC LIMIT 10 maybe? :)

да, вы правы. ТС наверно заинтересуется теми, у кого толще :)

drBatty ★★
()
Ответ на: комментарий от xhat

>чтобы вывести список людей кто набрал наибольший за 24 часа. Такой запрос выведет как вы понимаете топ-10 скора за все время

э... это надо вывести тех, у кого быстрее всего скор рос? За какой период? или вообще?

ну тогда да, временную таблицу надо, в которой посчитать для каждого юзверя «звёздный час», день, когда ему больше всего скора дали.

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

DATE | SCORE

drBatty ★★
()
Ответ на: комментарий от drBatty

С DATE код вроде работает, завтра ещё протестирую А по поводу множества таблиц для пользователей опять таки всех с UID =$uid и сортируем по времени. :) Проблеммка пока вроде решена :)

chapay ★★★
() автор топика

SELECT * FROM db_name.table_name WHERE UID > (SELECT MAX(UID) FROM db_name.table_name) - 10 ORDER BY UID;

ddevil
()

не вижу проблем, используйте [b]BETWEEN[/b]

xspirit
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.