Используя MySQL «поиск до» и имея в виду пример на https://stackoverflow.com/a/45029807/5807146, Я получаю правильно упорядоченные результаты:
SELECT * FROM table, (SELECT @until_var := NULL) _until
WHERE ISNULL(@until_var := IF(value = 100, value, @until_var))
ORDER BY value DESC
Следующее, что мне нужно (и безуспешно), это подсчет упорядоченных:
SELECT COUNT(*) FROM table, (SELECT @until_var := NULL) _until
WHERE ISNULL(@until_var := IF(value = 100, value, @until_var))
ORDER BY value DESC
Всегда возвращает количество найденных, без учета ORDER BY
.
Пример: В БД, где столбец id
является первичным индексом, а столбец date
может быть любым, я пытаюсь заставить MySQL считать из записей с самой высокой датой:
id | value | date
----|-------|----------
1 | A | mar
2 | A | jan
3 | A | apr
4 | B | feb
SELECT COUNT(*) FROM table, (SELECT @until_var := NULL) _until
WHERE value = "A" AND ISNULL(@until_var := IF(id = 4, value, @until_var))
ORDER BY date DESC
С желаемыми результатами:
id | value | date
----|-------|----------
3 | A | apr
1 | A | mar
= 2
Мое текущее (медленное) решение было бы получить столбец id
, а затем подсчитать результаты ... но это медленно. Цель состоит в том, чтобы быть как можно быстрее.
Спасибо