Bitterman
Новичок
Krishna
Протестил твой запрос, все то же самое - циклит.
Для такого набора
+----+------+
| ID | Rate |
+----+------+
| 3 | 5 |
| 2 | 5 |
| 19 | 4 |
| 17 | 4 |
| 7 | 3 |
| 1 | 3 |
+----+------+
запрос
[sql]
SELECT MIN(ID) FROM TestImage
WHERE ID <> 19 GROUP BY Rate HAVING Rate >= 4
ORDER BY Rate ASC LIMIT 1
[/sql]
(то есть, когда текущий элемент - 19), возвращает элемент 17, а запрос
[sql]
SELECT MIN(ID) FROM TestImage
WHERE ID <> 17 GROUP BY Rate HAVING Rate >= 4
ORDER BY Rate ASC LIMIT 1
[/sql]
возвращает элемент 19.
Тем не менее, мысль ты мне подкинул, спасибо
Думаю, что сделаю так:
сначала запросом
[sql]
select * from TestImage WHERE Rate=$Rate AND ID<$ID ORDER BY Rate DESC, ID DESC LIMIT 1
[/sql]
вычислю следующий элемент с тем же рейтингом, если вернется пустой результат, то тогда использую запрос
[sql]
select * from TestImage WHERE Rate<$Rate ORDER BY Rate DESC, ID DESC LIMIT 1
[/sql]
Вроде получается не очень сложно и работает. Хотя, конечно, надо будет еще потестить.
Протестил твой запрос, все то же самое - циклит.
Для такого набора
+----+------+
| ID | Rate |
+----+------+
| 3 | 5 |
| 2 | 5 |
| 19 | 4 |
| 17 | 4 |
| 7 | 3 |
| 1 | 3 |
+----+------+
запрос
[sql]
SELECT MIN(ID) FROM TestImage
WHERE ID <> 19 GROUP BY Rate HAVING Rate >= 4
ORDER BY Rate ASC LIMIT 1
[/sql]
(то есть, когда текущий элемент - 19), возвращает элемент 17, а запрос
[sql]
SELECT MIN(ID) FROM TestImage
WHERE ID <> 17 GROUP BY Rate HAVING Rate >= 4
ORDER BY Rate ASC LIMIT 1
[/sql]
возвращает элемент 19.
Тем не менее, мысль ты мне подкинул, спасибо

Думаю, что сделаю так:
сначала запросом
[sql]
select * from TestImage WHERE Rate=$Rate AND ID<$ID ORDER BY Rate DESC, ID DESC LIMIT 1
[/sql]
вычислю следующий элемент с тем же рейтингом, если вернется пустой результат, то тогда использую запрос
[sql]
select * from TestImage WHERE Rate<$Rate ORDER BY Rate DESC, ID DESC LIMIT 1
[/sql]
Вроде получается не очень сложно и работает. Хотя, конечно, надо будет еще потестить.