Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在第一个结果之后更改排序条件_Sql_Mysql_Sorting - Fatal编程技术网

Sql 在第一个结果之后更改排序条件

Sql 在第一个结果之后更改排序条件,sql,mysql,sorting,Sql,Mysql,Sorting,我正在从新闻文章数据库中进行选择,如果可能的话,我更愿意在一个查询中完成这一切。在结果中,我需要一个仅适用于第一个结果的排序标准 在我的例子中,第一个结果必须有一个图像,但是其他结果应该在不考虑其图像状态的情况下进行排序 这是我在MySQL查询中使用某种条件或用户变量可以做到的吗?我认为这是不可能的,因为它实际上是两个查询(第一个查询必须对表进行排序,第二个查询无序),所以您最好在第一个查询中使用限制为1的两个查询。我认为这是不可能的,由于它实际上是两个查询(第一个查询必须对表进行排序,第二个查

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

在我的例子中,第一个结果必须有一个图像,但是其他结果应该在不考虑其图像状态的情况下进行排序


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

我认为这是不可能的,因为它实际上是两个查询(第一个查询必须对表进行排序,第二个查询无序),所以您最好在第一个查询中使用限制为1的两个查询。

我认为这是不可能的,由于它实际上是两个查询(第一个查询必须对表进行排序,第二个查询没有排序),因此您最好在第一个查询中使用两个查询,限制为
1

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

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

这样可以确保文章顶部有图像

SELECT
  id,
  title,
  newsdate,
  article 
FROM
  news
ORDER BY
  CASE WHEN HasImage = 'Y' THEN 0 ELSE 1 END,
  newsdate DESC
当然,除非你把“第一个结果”定义得更接近。此查询首选带有图像的文章,不带图像的文章将显示在末尾

另一个变体(感谢勒多菲尔,他出于某种原因删除了他的答案)是:

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)表示“最早”)的文章进行排序,并将图像放在顶部。

类似的操作可确保文章顶部有图像

SELECT
  id,
  title,
  newsdate,
  article 
FROM
  news
ORDER BY
  CASE WHEN HasImage = 'Y' THEN 0 ELSE 1 END,
  newsdate DESC
当然,除非你把“第一个结果”定义得更接近。此查询首选带有图像的文章,不带图像的文章将显示在末尾

另一个变体(感谢勒多菲尔,他出于某种原因删除了他的答案)是:

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)表示“最早”)的文章进行排序,并将图像置于顶部。

这将对整个列表进行排序,而不仅仅是第一个结果。如原问题所述,我不想按图像状态对整个文章列表进行排序。我希望第一篇文章是一个带有图像的文章,但我希望第二篇文章(以及所有后续文章)中的图像状态被忽略-根本不应该考虑它。请看我的第二个查询,它不再是一个查询,但有了正确的索引,我不希望子查询成为真正的问题。这会对整个列表进行排序,不仅仅是第一个结果。正如原始问题中所述,我不想按照图片状态对整个文章列表进行排序。我希望第一篇文章是一个带有图像的文章,但我希望第二篇文章(以及所有后续文章)中的图像状态被忽略-这根本不应该被考虑。请看我的第二个查询,它不再是一个查询,但有了正确的索引,我不希望子查询成为真正的问题。