繁体   English   中英

MySQL查询UNION与ORDER不起作用

[英]Mysql query UNION with ORDER don't work

我的SQL查询有问题。

此代码用于发布当天的展示文章。

例:

BLOG ONE: day of pubblication every 16th of mounth
BLOG TWO: day of pubblication every 2nd of mounth
BLOG THREE: day of pubblication every 23th of mounth

因此,今天24日我必须看到发布日为24,25,26,27,28,1,2,3,4,5 .................的博客。

问题是合并两个查询

( DAY FROM TODAY TO 31th) + (DAY FROM 1st TO YESTERDAY)

这是第一查询

$queryallblog = mysql_query("
(
  SELECT * 
  FROM day,blog 
  WHERE day.autore = blog.titolo && day.titolo >= DAY(CURRENT_DATE())
  ORDER BY day.titolo
)") or die(" Error: (" . mysql_errno() . ") " . mysql_error()); 

这是第二个:

$queryallblog = mysql_query("
(
  SELECT * 
  FROM day,blog 
  WHERE day.autore = blog.titolo && day.titolo < DAY(CURRENT_DATE())
  ORDER BY day.titolo
)") or die(" Error: (" . mysql_errno() . ") " . mysql_error()); 

使用UNION语句时,全局顺序不正确

如果我正确理解了您的问题,那么您的问题不是关于UNION查询,而是关于正确排序结果。 我将使用这样的查询:

SELECT
  *
FROM
  day inner join blog on day.autore = blog.titolo
ORDER BY
  case when day.titolo >= DAY(CURRENT_DATE()) then 1 else 2 end,
  day.titolo
  • 我正在使用内部联接而不是where语法
  • 如果day.titolo> =当前日期,则when会返回1,否则返回2。 首先将返回当天之后的行,然后返回当天之前的行
  • 然后按天订购行。
  • 您可能需要添加其他过滤器,例如月份

您可以通过UNION ALL查询获得类似的结果,但必须添加额外的列:

SELECT 1 as t, *
FROM day inner join blog on day.autore = blog.titolo
WHERE day.titolo >= DAY(CURRENT_DATE())
UNION ALL
SELECT 2 as t, *
FROM day inner join blog on day.autore = blog.titolo
WHERE day.titolo < DAY(CURRENT_DATE())
ORDER BY t, day.titolo

但是,我至少在这种情况下不建议这样做。

(SELECT * 

FROM day,blog 
WHERE day.autore = blog.titolo && day.titolo >= DAY(CURRENT_DATE())
ORDER BY day.titolo) 
UNION ALL
(SELECT * 

FROM day,blog 
WHERE day.autore = blog.titolo && day.titolo < DAY(CURRENT_DATE())
ORDER BY day.titolo) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM