我正在从新闻文章的数据库中进行选择,如果可能的话,我更愿意在一个查询中完成所有操作。在结果中,我需要一个仅适用于第一个结果的排序标准。
在我的情况下,第一个结果必须有一个图像,但其他结果应该排序,而不关心他们的图像状态。
这是我可以用MySQL查询中的某种条件或用户变量做的事情吗?
答案 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个查询第一个。