希望您可以通过以下查询来帮助我。返回MYSQL查询中where行所在行的位置
我有一个叫做“分数”表,该表列出了用户的成绩,并实现在比分上所花费的时间。
我想返回的查询,告诉他们在什么位置的用户排行榜。
表概述
+----+---------+-------+------------+
| id | user_id | score | time_taken |
+----+---------+-------+------------+
| 2 | 8 | 2 | 2 |
| 3 | 9 | 2 | 3 |
| 4 | 10 | 0 | 2 |
| 5 | 11 | 2 | 3 |
+----+---------+-------+------------+
我有以下查询将返回我需要创建一个新的行呼吁飞“位置”的数据。
但我很努力地添加一个where子句到这个语句来返回给定用户id的位置列。
SELECT @rank:= 0;
SELECT @rank:= @rank + 1 as rank, s.* FROM (
SELECT user_id, score, time_taken
FROM scores
ORDER BY
score DESC, time_taken ASC
LIMIT 100
)s
SQL数据
CREATE TABLE `scores` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(10) unsigned NOT NULL,
`score` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`time_taken` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`answers` text COLLATE utf8_unicode_ci NOT NULL,
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
KEY `scores_user_id_foreign` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `scores` (`id`, `user_id`, `score`, `time_taken`, `answers`, `created_at`, `updated_at`)
VALUES
(2, 8, '2', '2', '[{\"5\":\"17\"},{\"7\":\"26\"},{\"6\":\"21\"},{\"4\":\"16\"}]', '2015-11-04 17:26:46', '2015-11-04 17:26:46'),
(3, 9, '2', '3', '[{\"7\":\"25\"},{\"4\":\"14\"},{\"5\":\"17\"},{\"6\":\"22\"}]', '2015-11-04 17:28:47', '2015-11-04 17:28:47'),
(4, 10, '0', '2', '[{\"7\":\"25\"},{\"4\":\"13\"},{\"6\":\"21\"},{\"5\":\"17\"}]', '2015-11-04 17:29:02', '2015-11-04 17:29:02'),
(5, 11, '2', '3', '[{\"6\":\"22\"},{\"4\":\"13\"},{\"5\":\"18\"},{\"7\":\"25\"}]', '2015-11-04 17:29:17', '2015-11-04 17:29:17');
输出需要
我只是想找回USER_ID和位置他们是排行榜中(这是由所有的结果来确定,按分数排序,按时间排序)。
+----------+---------+
| position | user_id |
+----------+---------+
| 3 | 9 |
+----------+---------+
我看了一下,但似乎无法找到合适的答案。
任何帮助将不胜感激。
你能举一个预期结果的例子吗? –
嘿@KostasMitsarakis当然。 我只想检索user_id和它们在排行榜内的位置(由所有结果确定,按分数排序,按时间排序)。我用示例输出更新了问题。 – user3118689
将它作为子查询包装起来,然后用user_id和你想要的位置添加一个where子句; –