MySql Query, выберите больше чем - PullRequest
12 голосов
/ 12 декабря 2008

У меня есть таблица faq_questions со следующей структурой:

id int not_null auto_increment,
question varchar(255),
sort_order int

Я пытаюсь создать запрос с заданным порядком сортировки, выбирая строку со следующим наивысшим порядком сортировки.

Пример:

id  question                sort_order
1   'This is question 1'    10
2   'This is question 2'    9
3   'This is another'       8
4   'This is another one'   5
5   'This is yet another'   4

Хорошо, представьте, что я передаю 5 для моего известного порядка сортировки (id 4), мне нужно, чтобы он возвращал строку с идентификатором 3. Поскольку нет гарантии, что sort_order будет смежным, я не могу просто выбрать known_sort_order + 1 .

Спасибо!

Ответы [ 4 ]

24 голосов
/ 12 декабря 2008

Это кажется слишком простым, но выглядит так, как вам нужно:

SELECT id,question FROM `questions` 
WHERE `sort_order` > sort_order_variable
ORDER BY sort_order ASC 
LIMIT 1
3 голосов
/ 12 декабря 2008
SELECT * FROM table_name WHERE sort_order > 5 ORDER BY sort_order ASC LIMIT 1
2 голосов
/ 12 декабря 2008

Вы можете сделать это с помощью TOP или LIMIT:

SELECT TOP 1 * FROM faq_questions
WHERE sort_order > 5
ORDER BY sort_order ASC

но это не так элегантно или портативно, как

SELECT *  
FROM faq_questions AS f1  
LEFT JOIN faq_questions AS f2  
    ON f1.sort_order > f2.sort_order  
    AND f2.sort_order = 5  
LEFT JOIN faq_questions AS f3  
    ON f3.sort_order BETWEEN f1.sort_order AND f2.sort_order  
WHERE f3.id IS NULL
0 голосов
/ 12 декабря 2008
SELECT 
    id, question, sort_order
FROM faq_questions 
WHERE sort_order in 
(SELECT 
        MIN(sort_order) 
    FROM faq_questions 
    WHERE sort_order > ?);

Кажется, что работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...