Выборка предыдущей и следующей записи

  • Автор темы Автор темы Prolix
  • Дата начала Дата начала
все дело как раз в том, что записи могут пересоздаваться гораздо чаще, скажем, пару раз в минуту.
3. штука эта должна работать для поисковика, а не для юзера
кто писал? об актуальности данных для поисковика заботитесь? или просто что попало пишите?
 
set @a=(select concat(1-priority, title) from records where ID=2)
select * from records where concat(1-priority, title)<@a order by concat(1-priority, title) asc limit 1; // предыдущая запись
select * from records where concat(1-priority, title)>@a order by concat(1-priority, title) asc limit 1; // следующая запись

conclusion
concat(1-priority, title) = KEY
 
Ну почему... конструкция
SET @cnt = 0; SELECT id, .. , (@cnt := @cnt + 1) FROM ...
даст то, что ты хочешь.. но при этом придется получать всю таблицу и потом уже выбирать другие два ID.
Мой вариант чем хорош еще - снимается нагрузка ORDER при селектах плюс, если делать выборку всей таблицы сортировки сразу, ее можно кешировать (или скриптом или средствами самого мускуля). Если селекты очень часто, то это будет правильно =) Если инсерты новых записей чаще, чем селекты... хм.. надо подумать =)
 
MiksIr
Селекты, конечно же, намного чаще получаются. Так что ваш вариант вполне годится, для моего частного конкретного случая.

Вообще, мне понравился вот этот вариант (приводится на одном из сайтов, которые я упомянул выше):

DO @a := 0;
SELECT @a := @a + 1 AS sequence, *
FROM mytable
WHERE artist_type = 'clay'
ORDER BY artist_lastName
HAVING sequence = 2 OR sequence = 4;

Но я не понимаю, в какой версии mySQL это работает. На 4.1.9 это не работает, ошибка не возникает, однако и sequence принимает только пустое значение.
 
Я тоже не понимаю, в какой версии это может работать, ибо
Note: In a SELECT statement, each expression is evaluated only when sent to the client.
 
В последнем mySQL такого рода переменные можно как-то в функциях хранить? Например, в каждом вызове SELECT содержать что-то вроде "SELECT cnt_func()..."?
 
Сверху