Что у меня есть:
Table 1 : USERS (autoID, name, etc)
Table 2 : TROPHIES (autoID, name, etc)
Table 3 : VIEWS (userID, timestamp, etc)
Table 4 : CANDIDATES (userID, trophyID, etc)
Что я знаю: USERS.autoID
& TROPHIES.autoID
Как яСделайте это:
У меня есть таблица TROPHIES, в которой я храню различные категории, на которые могут быть назначены пользователи.
Каждый пользователь может быть номинирован на 1,2 или более трофеев из таблицы TROPHIES.
В таблице VIEWS я сохраняю каждое представление профилей для каждого отдельного пользователя с USERS.autoID, отметкой времени и другими данными.
В таблице CANDIDATES я храню TROPHIES.autoID и USERS.autoID - таким образом я знаю, какой пользователь назначен для какого трофея.
Что мне нужно знать
Знание USERS.autoID & TROPHIES.autoID Я хочу сделатьTOP на основе количества записей за последние 3 дня, например, в таблице VIEWS всех пользователей, перечисленных в таблице CANDIDATES для этого конкретного трофея, и узнайте ПОЗИЦИЮ на этой вершине конкретного пользователя.
Итакскажем, пользователь с autoID 1 назначен на трофей с тУ него autoID 10 и 100 записей в таблице VIEWS за последние 3 дня, но есть еще 3 пользователя, назначенные на TROPHY с autoID 10, которые имеют более 100 записей за последние 3 дня, так что ... Мне нужно выбратьвернул бы число 4.
Мои вопросы:
Могу ли я сделать это с помощью одного запроса SELECT?Если да ... как?Если нет ... как я мог сделать этот запрос, чтобы потратить как можно меньше ресурсов.
Спасибо!
[РЕДАКТИРОВАТЬ]
Вотнекоторые данные
ТАБЛИЦА 1 - ПОЛЬЗОВАТЕЛИ
+--------+-------+
| autoID | name |
+--------+-------+
| 1 | user1 |
| 2 | user2 |
| 3 | user3 |
+--------+-------+
ТАБЛИЦА 2 - ТРОФИИ
+--------+------------+
| autoID | name |
+--------+------------+
| 1 | Baseball |
| 2 | Basketball |
| 3 | Boxing |
+--------+------------+
ТАБЛИЦА 3 - ПРОСМОТРЫ
+--------+--------+------------+
| autoID | userID | timestamp |
+--------+--------+------------+
| 1 | 2 | 1551632970 |
| 2 | 2 | 1551632971 |
| 3 | 3 | 1551632972 |
| 4 | 1 | 1551632973 |
| 5 | 2 | 1551632974 |
| 6 | 1 | 1551632975 |
| 7 | 3 | 1551632976 |
| 8 | 1 | 1551632977 |
| 9 | 2 | 1551632978 |
| 10 | 3 | 1551632979 |
| 11 | 3 | 1551632980 |
| 12 | 3 | 1551632981 |
+--------+--------+------------+
ТАБЛИЦА 4 -КАНДИДАТЫ
+--------+--------+----------+
| autoID | userID | trophyID |
+--------+--------+----------+
| 1 | 2 | 1 |
| 2 | 3 | 3 |
| 3 | 1 | 2 |
| 4 | 1 | 1 |
+--------+--------+----------+
В конце я хочу узнать, на какой позиции находится пользователь для конкретного трофея, основываясь на записях из таблицы VIEWS.
Допустим, я хочупроверьте положение ПОЛЬЗОВАТЕЛЯ с autoID = 1 для бейсбола (трофей с autoID = 1) после отметки времени 1551632972.
Итак ... Сначала мы должны увидеть, какие пользователи перечислены в этом трофее, чтобы мы моглиигнорировать записи из таблицы VIEWS для других пользователей.Трофей с autoID 1 (бейсбол) включает в себя только двух пользователей - user1 и user2.
Теперь я хочу посмотреть, сколько записей у обоих, так что я смогу узнать, какова позиция пользователя1 наthis top.
Так что, если мы выберем и посчитаем все записи из таблицы VIEWS для user1, где отметка времени равна или превышает 1551632972, мы получим число 3, и если мы сделаем то же самое для user2, то получим2 и так как 3 больше 2, user1 будет на 1-м месте, а user2 будет на 2-м месте.
Я ищу способ получить место в ТОПе для конкретного пользователя внутри определенногоиспользовать один запрос MySQL (если это возможно) или найти лучшее решение для этого ...