Таблица с запросом на строку

#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 это общее количество пользователей, которые появляются на каждом маршруте