私は現在have a question about thisですが、それは当然のことながら、その延長とエディションのためにそれが値する注意を受けているとは思いません。これで私は可能な限り簡潔にしようとします、行くことができます!行の位置を正しく取得しようとしています
私はこのSQLFiddle
私は現在、それに2つのクエリを持ってで、特定のテーブルの行の位置を取得しようとしています:の)(COUNTがある(コラムランクによってそれらを注文するすべての行を示しています1他の行)。特定の行の情報を取得するその他のものです。
SQLFiddleのこのスクリーンショットでは、現在の結果があり、黄色(位置の列のすぐ隣)に目的の結果があります。あなたはそれがあるべきとして「位置」は、おそらく、列IDに、いない列ランクを参照していることがわかります。
どのように私は望ましい結果を達成することができますか?
スキーマ:
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!');
テストクエリ:
がケースでフィドルが、ここではすべてのDLLをロードだしない
/* 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
Do not duplicate理由が何であっても、同じ質問を2度お願いします。 – Shadow
元の質問を削除しました。 –