Решение для ранжирования SQL

Я внедряю решение ранжирования для одной из моих таблиц, чтобы оптимизировать запросы на чтение, чтобы избавиться от дорогих запросов, в которых используются предложения COUNT (*), LIMIT и OFFSET. Моя проблема в том, что я не знаю, почему расчет позиции неверен. Пожалуйста, посмотрите на мой пример, чтобы воспроизвести проблему.

CREATE TABLE `acl`
(
    `id` MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(32) NOT NULL,
    `limiter` INTEGER(11) SIGNED NULL,
    PRIMARY KEY (`id`)
)
ENGINE=INNODB;

CREATE TABLE `quote`
(
    `id` MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,
    `created_at` INTEGER(11) UNSIGNED NOT NULL,
    `reputation` INTEGER(11) SIGNED NOT NULL,
    PRIMARY KEY (`id`)
)
ENGINE=INNODB;

INSERT INTO `acl` (`name`, `limiter`) VALUES ('Users', 0), ('Staff', null);
INSERT INTO `quote` (`created_at`, `reputation`) 
  VALUES (UNIX_TIMESTAMP(), 0), (UNIX_TIMESTAMP()+1, 0);

SET @acl_id := 0, @position := 0;
SELECT acl.id AS acl_id, quote.id AS quote_id, 
  GREATEST(@position := IF(@acl_id = acl.id, @position + 1, 1), 
    LEAST(0, @acl_id := acl.id)) AS position 
FROM acl JOIN quote 
  ON (acl.limiter IS NULL OR quote.reputation >= acl.limiter) 
ORDER BY acl.id ASC, quote.created_at DESC;

Я хотел бы, чтобы запрос select выбрал все строки acl и одновременно соединил их со строками кавычек, установил их позицию, но все, что я получаю, это position = 1 для каждой строки. Кто-то предложил мне перенести присваивание переменных в предложение JOIN или ORDER, но проблема остается. У меня вопрос ... как назначить позицию в одном запросе?

Ответы на вопрос(2)

Ваш ответ на вопрос