#javascript #php #mysql #sql #ajax
#javascript #php #mysql #sql #ajax
Вопрос:
Я ищу какой-нибудь учебник, который покажет мне, как создать хорошую таблицу с помощью AJAX. Например, у меня есть таблица, в которой у меня есть пользователи, а также таблица, в которой у меня есть записи пользователей.
Таблица пользователей
UserID | Name
=======|===========
000001 | Kristian
000002 | David
000003 | Tomas
000004 | Philip
000005 | John
Таблица запусков
UserID | RouteName | RunTime
============================
000001 | Route#001 | 45
000001 | Route#002 | 30
000001 | Route#003 | 20
000002 | Route#001 | 10
000002 | Route#002 | 5
000002 | Route#003 | 25
000003 | Route#001 | 25
000003 | Route#002 | 50
000004 | Route#002 | 100
000004 | Route#003 | 200
000003 | Route#001 | 300
И я хочу создать таблицу, в которой вы сможете видеть позицию по имени маршрута в зависимости от времени выполнения для конкретного идентификатора пользователя.
Итоговая таблица для идентификатора пользователя 000001
RouteName | RunTime | Position
==============================
Route#001 | 45 | 3/4
Route#002 | 30 | 2/4
Route#003 | 20 | 1/3
Чтобы создать подобную таблицу в PHP, требуется один запрос для выбора каждого запуска для каждого пользователя, а также 2 запроса на строку для вычисления позиции и количества времени прохождения маршрута.
И у меня не так много маршрутов, у меня есть более 500 маршрутов, и если я запускаю его в одном, пока это занимает время сопоставления, поэтому я ищу какой-нибудь учебник по использованию AJAX и разбивке строк на страницы или помощь в его создании. Спасибо.
Комментарии:
1. Я пытался создать его с помощью datatables.net но у меня нет для этого навыков.
Ответ №1:
Вы можете использовать оконные функции:
select *
from (
select t.*,
rank() over(partition by routename order by runtime) rn,
count(*) over(partition by routename) cnt
from mytable t
) t
where userid = 1
При этом выбираются все строки таблицы для данного userid
значения с двумя дополнительными столбцами:
rn
— ранг пользователя на каждом маршруте; самый быстрый пользователь получает ранг1
, а пользователи с одинаковым временем выполнения получают одинаковый рангcnt
это общее количество пользователей, которые появляются на каждом маршруте