2013-04-22 2 views
0

Предположим, у меня есть таблица в базе данных, например this table. Предположим, что я хочу получить записи слева и справа от записи, первичный ключ которой равен 5 (или любому другому первичному ключу). Поэтому в нашем случае я хочу получить записи, чей первичный ключ равен 4 и 6 соответственно. Что такое SQL-запрос, который даст мне такой результат? Можете ли вы, ребята, перевести SQL-запрос в запрос find('all') CakePHP?найти записи слева и справа от определенной записи в таблице mysql в одном запросе

Спасибо

ПРИМЕЧАНИЕ: Идентификаторы не обязательно являются смежными, а это означает, что они не обязательно следуют последовательность 1, 2, 3, 4, 5, 6, 7, 8. Я могу что-то вроде 1, 5, 13, 44, 66, 123 и т.д.

ответ

3

Попробуйте Союз как этот

(SELECT * FROM employee WHERE id < 5 order by id DESC LIMIT 1) 
UNION 
(SELECT * FROM employee WHERE id >5 LIMIT 1) 
+0

Хорошо, но теперь, как вы переводите это на CakePHP find()? – user765368

+0

Спасибо, кстати, я не работал над cakepgp, но эти ссылки могут помочь вам http://stackoverflow.com/questions/3536107/union-syntax-in-cakephp http://stackoverflow.com/questions/7432065/ how-can-i-do-sql-union-in-cake-php –

1

PHP

$id = 5; 
SELECT * FROM Employee where id = $id-1 OR id = $id+1; 

MySQL

SET @id = 5; 
SELECT * FROM Employee where id = @id-1 OR id = @id+1; 
+0

Что делать, если мои первичные ключи похожи на '1, 5, 13, 44, 66, 123'? – user765368

+0

@ user765368 then chandrash_cool ответить – Amir

0

Оформить заказ find('neighbors'). Он возвращает записи до и после того, что вы укажете, и ваши идентификаторы могут иметь «дыры» в последовательности.