Задавайте вопросы, мы ответим
Вы не зашли.
Есть таблица, типа, с картинками.
В ней есть сортировка:
KEY `photo_ratings` (`photo_ratings, photo_id`),
Выдаём в таблицу:
SELECT
. . .
WHERE photo_cat_id=12
GROUP BY photo_id
ORDER BY photo_ratings DESC,photo_id DESC LIMIT 0,12
Плучаем:
ratings id
5000 94
4000 339
4000 338
4000 91
3000 132
1501 728
1501 714
1501 702
1501 695
1501 694
1501 692
1501 651
Это правильно. Рейтинги одинаковые, значит, нужно идти по id, которое фактически даёт порядок по времени вложения.
Теперь я показываю конкретную фоту из списка. Тоже нормально.
А, вот, когда я начинаю выбирать следующую/предыдущую начинаются фокусы.
Нп, если стою на id=338, то выбирает следующую id = 94. и так далее:
SELECT photo_id FROM photo_show
WHERE (photo_ratings<='4000' OR photo_id<'339'
AND photo_cat_id=12
ORDER BY photo_ratings DESC,photo_id DESC LIMIT 1
Если вместо OR сделать AND, то такая же глюка будет в другом месте.
Как выбрать следующую? Другой индекс? Какой?
Это же страничка в и-нете, и я не могу создать р\вариант курсора и т.п. Т.е каждый запрос - последний
Спасибо! Александр.
Неактивен
А можно задать ключ как-то так?
KEY `photo_ratings` (`photo_ratings*10000+photo_id`)
Такой ключ будет работать, по-любому, правильно!
Неактивен
Хм, как-то странно потерялось Ваше изначальное сообщение у меня в почте
Заменять надо не просто AND на OR
SELECT photo_id FROM photo_show
WHERE (photo_ratings<4000) OR (photo_ratings = 4000 AND photo_id < 339)
AND photo_cat_id=12
ORDER BY photo_ratings,photo_id LIMIT 1
Неактивен
Большое спасибо!
Нужно больше отдыхать. Особенно летом. Такую глупость не допереть
Неактивен