изменение критериев сортировки после первого результата - PullRequest
1 голос
/ 30 марта 2009

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

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

Это то, что я могу сделать с условными или пользовательскими переменными в запросе MySQL?

Ответы [ 3 ]

4 голосов
/ 30 марта 2009

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

2 голосов
/ 30 марта 2009

Примерно так получается статья с изображением вверху.

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

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

Другой вариант (спасибо le 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 (id) означает "самая ранняя") статью с изображением вверху.

1 голос
/ 30 марта 2009

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

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