как получить в алфавитном порядке следующие и предыдущие записи с минимальными извлеченными записями? - PullRequest
0 голосов
/ 05 марта 2010

У меня есть страница, которая отображает название компании и ее данные из таблицы A. Теперь скажите, что у меня отображается компания, и ее имя - Company_one. Теперь я хочу отсортировать по алфавиту следующую компанию и предыдущую компанию, их данные и т. Д.

Данные в моей таблице не отсортированы. Они сохраняются при получении данных.

Итак, какой тип запроса мне написать, чтобы он выдавал только одну предыдущую и одну следующую отсортированную по алфавиту запись? Пожалуйста, помогите !!

Ответы [ 3 ]

7 голосов
/ 05 марта 2010

Нет хорошего способа сделать это одним запросом.Просто выполните два запроса.

Чтобы получить предыдущий:

SELECT * FROM companies
WHERE name < variable_with_current_name
ORDER BY name DESC
LIMIT 1

Чтобы получить следующий:

SELECT * FROM companies
WHERE name > variable_with_current_name
ORDER BY name ASC
LIMIT 1
0 голосов
/ 01 марта 2015

Основываясь на ответе Доминика, вы можете достичь того же результата, используя один запрос, комбинируя их с WHERE и OR.

Например:

SELECT * FROM `companies`
WHERE (
    `name` = IFNULL(
        (SELECT `name` FROM `companies` 
            WHERE `name` < 'variable_with_current_name'
            ORDER BY `name` DESC
            LIMIT 1)
        , 0)
OR
    `name` = IFNULL(
        (SELECT `name` FROM `companies` 
            WHERE `name` > 'variable_with_current_name'
            ORDER BY `name` ASC
            LIMIT 1)
        , 0)
) 

Надеюсь, это поможет.

0 голосов
/ 05 марта 2010

Для сортировки таблицы необходимо использовать условие сортировки Прототип для sort:

sort by fieldname

Пример запроса:

select * from your_table sort by company asc

Если вы хотите ограничить записи, используйте предложение limit:

select * from your_table sort by company asc limit 0, 1
...