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

hermit_refined

Отшельник
все дело как раз в том, что записи могут пересоздаваться гораздо чаще, скажем, пару раз в минуту.
3. штука эта должна работать для поисковика, а не для юзера
кто писал? об актуальности данных для поисковика заботитесь? или просто что попало пишите?
 

AlbertTheII

Новичок
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
 

MiksIr

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

Prolix

Новичок
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 принимает только пустое значение.
 

MiksIr

miksir@home:~$
Я тоже не понимаю, в какой версии это может работать, ибо
Note: In a SELECT statement, each expression is evaluated only when sent to the client.
 

Prolix

Новичок
В последнем mySQL такого рода переменные можно как-то в функциях хранить? Например, в каждом вызове SELECT содержать что-то вроде "SELECT cnt_func()..."?
 
Сверху