2013-03-29 2 views
0

В моем проекте у меня есть 3 запроса mysql, один для получения информации о следующем событии компании, один для информации для предыдущего события, и я хочу сделать это для все другие события.Mysql Query, чтобы получить все строки из таблицы, кроме 2

Дата указана: $ date = date ("Y-m-d");

Для следующего события у меня есть: SELECT * FROM Passeio WHERE passeio_date> $ Дата LIMIT 0,1

Для предыдущего события я есть: SELECT * FROM Passeio WHERE passeio_date < $ Дата LIMIT 0,1

Как я могу сделать все остальные строки, кроме предыдущего и следующего.

Заранее благодарен!

ответ

0

Если у вас есть первичный ключ на столе, вы можете запросить комбинацию этих двух запросов, чтобы получить все «другие» строки:

select * from passeio where ID not in 
( select * from (
    select ID from passeio where passeio_date > $date LIMIT 0,1 
    UNION 
    select ID from passeio where passeio_date < $date LIMIT 0,1 
    )t 
) 
+0

Это дает мне ошибку # 1248 - Каждая производная таблица должна иметь свой собственный псевдоним. –

+0

@JoaoCorreia - вы правы. Попробуйте сейчас. добавил 't'. Если он все еще не работает, сделайте выбор t. * Вместо всего лишь * во внутреннем запросе – Brian

+0

Спасибо за вашу помощь Брайан, это уже сработало! –

0

При использовании limit, вы всегда должны включать в себя order by если вы имеют конкретный порядок в виду. Я думаю, что вопрос вы хотите:

select * from passeio where ID not in 
( select * from (
    select ID from passeio where passeio_date > $date order by passeio_date asc LIMIT 1 
    UNION ALL 
    select ID from passeio where passeio_date < $date order by passeio_date desc LIMIT 1 
    )t 
) 

Я также включил union в union all, потому что вам не нужно для устранения дубликатов.

Возможно, более эффективный способ сделать это:

select * 
from passeio 
where passeio_date > $date 
order by passeio_date 
limit 1, 1000000000 
union all 
select * 
from passeio 
where passeio_date < $date 
order by passeio_date desc 
limit 1, 1000000000 

ли это более или менее эффективно, зависит от структуры данных, но это устраняет анти-соединения и не требует, имеющий идентификатор.

Смежные вопросы