我目前have a question about this,但我不认为这是可能接受它的扩展名和版本的整个时间,因为它应有的重视。有了这个,我会努力尽可能简洁,放手!试图让行位置正确
我想获得一个特定的表的行位置,在此SQLFiddle
我现在有上2个查询:一个是列出了列级排序它们(这是一个COUNT所有行()其他行);和其他获得特定行信息的其他人。
在这个屏幕截图的SQLFiddle的,我目前的结果,并且在黄色(毗邻位置列)我有希望的结果。你可以看到,“位置”所指的可能是列ID,不列秩,因为它应该是:
我怎样才能达到预期的效果?
万一小提琴不加载,这里的所有DLL:
模式:
CREATE TABLE IF NOT EXISTS `site_users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
INSERT INTO `site_users` (`id`, `username`) VALUES
(1, 'Mateus'),
(2, 'Marco'),
(3, 'John'),
(4, 'Luke'),
(5, 'Wall');
CREATE TABLE IF NOT EXISTS `site_articles_comments` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`data` int(11) NOT NULL,
`comment` text NOT NULL,
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;
INSERT INTO `site_articles_comments` (`id`, `user_id`, `data`, `comment`) VALUES
(1, 1, 1492101324, 'Too good to be true'),
(2, 1, 1492101392, 'It\'s so, not very.'),
(3, 1, 1492106262, 'I loved it!'),
(4, 3, 1492107619, 'Seems fishy'),
(5, 1, 1492108002, 'Don\'t blame it on her'),
(6, 2, 1492108433, 'As I highly doubt it'),
(7, 2, 1492200402, 'This is just a test'),
(8, 2, 1492267629, 'Another test'),
(9, 2, 1492267684, 'No sht'),
(10, 4, 1492267766, 'WTF?'),
(11, 2, 1492267796, 'Pics, pleaseee!');
测试查询:
/* This simply order users on rank (rank being number of comments) */
/* This query tries to get the row position of user based on rank */
SELECT x.id,
x.username,
x.rank,
x.position
FROM (SELECT u.id,
u.username,
@rownum := @rownum + 1 AS position,
(SELECT COALESCE(COUNT(DISTINCT(c.id)),0) AS rank
FROM site_articles_comments c
WHERE u.id = c.user_id ORDER BY rank DESC) AS rank
FROM site_users u
JOIN (SELECT @rownum := 0) r
ORDER BY rank DESC) x;
/* Based on the list above, user (Marco) should have a position number of 1 */
SELECT x.id,
x.username,
x.rank,
x.position
FROM (SELECT u.id,
u.username,
@rownum := @rownum + 1 AS position,
(SELECT COALESCE(COUNT(DISTINCT(c.id)),0) AS rank
FROM site_articles_comments c
WHERE u.id = c.user_id ORDER BY rank DESC) AS rank
FROM site_users u
JOIN (SELECT @rownum := 0) r
ORDER BY rank DESC) x
WHERE x.id = 2
可能重复[获取不同行的COUNT()的行位置](http://stackoverflow.com/questions/43437680/get-row-position-of-count-of-distinct-rows) – Shadow
不要无论原因是什么,都要问同样的问题两次。 – Shadow
好的,然后我删除了原来的问题。 –