2009-03-30 2 views
1

Я выбираю из базы данных новостных статей, и я бы предпочел сделать все это в одном запросе, если это возможно. В результатах мне нужен критерий сортировки, который применяется ТОЛЬКО к первому результату.изменение критериев сортировки после первого результата

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

Является ли это чем-то, что я могу сделать с помощью каких-либо условных или пользовательских переменных в запросе MySQL?

ответ

4

Даже если вам удастся найти запрос, похожий на один запрос, это будет логически два запроса. Посмотрите на MySQL UNION, если вы действительно должны сделать один запрос (но он все равно будет содержать 2 логических запроса). Вы можете объединить изображение в первом с лимитом 1, а остальное - во втором.

+0

Что относительно маленького образца кода? – Martin

1

Я не думаю, что это возможно, так как это фактически 2 запроса (первый запрос, который нужно отсортировать для таблицы, и второй неупорядоченный), поэтому вы можете использовать 2 запроса с LIMIT 1 в первом.

2

Что-то вроде этого обеспечивает изображение с изображением сверху.

SELECT 
    id, 
    title, 
    newsdate, 
    article 
FROM 
    news 
ORDER BY 
    CASE WHEN HasImage = 'Y' THEN 0 ELSE 1 END, 
    newsdate DESC 

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

Другой вариант (благодаря ле dorfier, который удалил свой ответ на какой-то причине) будет таким:

SELECT 
    id, 
    title, 
    newsdate, 
    article 
FROM 
    news 
ORDER BY 
    CASE WHEN id = (
    SELECT MIN(id) FROM news WHERE HasImage = 'Y' 
) THEN 0 ELSE 1 END, 
    newsdate DESC 

Это сортирует самый ранний (предполагая, что MIN (идентификатор) означает «ранние») статью с изображением наверху.

+0

Это сортирует весь список, а не только первый результат. – ceejayoz

+0

Как вы определяете «сортировку»? – Tomalak

+0

Как указано в исходном вопросе, я * не * хочу сортировать весь список статей по его состоянию изображения. Я хочу, чтобы статья * first * была одной с изображением, но я хочу, чтобы статус изображения был * проигнорирован * для второй статьи (и всех последующих) - ее вообще не следует рассматривать. – ceejayoz

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