在第一个结果之后改变排序标准

时间:2009-03-30 17:10:32

标签: sql mysql sorting

我正在从新闻文章的数据库中进行选择,如果可能的话,我更愿意在一个查询中完成所有操作。在结果中,我需要一个仅适用于第一个结果的排序标准。

在我的情况下,第一个结果必须有一个图像,但其他结果应该排序,而不关心他们的图像状态。

这是我可以用MySQL查询中的某种条件或用户变量做的事情吗?

3 个答案:

答案 0 :(得分:4)

即使你设法找到一个看起来像一个查询的查询,它也将是逻辑上的两个查询。如果你真的必须进行一次查询,请查看MySQL UNION(但它仍然是2个逻辑查询)。您可以将第一个图像合并为1,其余图像合并在第二个图像中。

答案 1 :(得分:2)

这样的东西可以确保顶部带有图像的文章。

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)表示“最早”)文章,并将图像排在最前面。

答案 2 :(得分:1)

我不认为这是可能的,因为它实际上是2个查询(表必须排序的第一个查询,第二个无序排序),所以你不妨使用LIMIT 1的2个查询第一个。