Mysql 先按最近3个月的顺序订购,然后按字母顺序订购

Mysql 先按最近3个月的顺序订购,然后按字母顺序订购,mysql,sql-order-by,case,Mysql,Sql Order By,Case,我被要求在一个网站上订购产品,首先展示过去3个月内的任何产品(从最新的开始),然后展示其余的阿尔卑斯竞技。目前该网站是以类为单位编写的,目前产品是按添加日期订购的。为了最大限度地减少工作量,我想知道是否可以在一个sql查询中完成上述操作?我认为它需要两个独立的查询,但我不是sql方面的专家,所以我想知道这是否可以实现 问候 菲尔 编辑 SELECT pr.id, pr.name AS prod_name, pr.eye_size, pr.bridge_size, pr.opt_size, pr.

我被要求在一个网站上订购产品,首先展示过去3个月内的任何产品(从最新的开始),然后展示其余的阿尔卑斯竞技。目前该网站是以类为单位编写的,目前产品是按添加日期订购的。为了最大限度地减少工作量,我想知道是否可以在一个sql查询中完成上述操作?我认为它需要两个独立的查询,但我不是sql方面的专家,所以我想知道这是否可以实现

问候

菲尔

编辑

SELECT pr.id, pr.name AS prod_name, pr.eye_size, pr.bridge_size, pr.opt_size, pr.price, pr.range_id, pr.date_added, ra.name AS range_name
FROM oa_product AS pr, oa_brand AS br, oa_range AS ra
WHERE pr.status = 'Launched'
AND pr.brand_id = br.id
AND br.filename = 'karenmillen'
AND pr.status = 'Launched'
AND pr.range_id = ra.id
AND br.status = 'Active'
ORDER BY
CASE WHEN DATEDIFF( 'm', GETDATE(
), date_added ) <3
THEN date_added
ELSE NULL , prod_name
LIMIT 0 , 6
选择pr.id、pr.name作为产品名称、pr.eye\u大小、pr.bridge\u大小、pr.opt\u大小、pr.price、pr.range\u id、pr.date\u added、ra.name作为范围名称
从oa_产品作为pr,oa_品牌作为br,oa_范围作为ra
其中pr.status=‘已发布’
和pr.brand_id=br.id
和br.filename='karenmillen'
和pr.status=‘已发布’
和pr.range_id=ra.id
和br.status='Active'
订购人
DATEDIFF('m',GETDATE)时的大小写(

),date_added)您可以使用案例陈述来处理所有超过3个月的产品日期

伪代码(近似于T-SQL)

选择产品名称、产品日期
来自产品
订购人
DATEDIFF('m',GETDATE(),ProductDate)<3时的情况,然后是ProductDate
否则无效,
产品名称

不需要两个单独的查询。您可以创建一个表达式,首先对最近的产品进行排序,然后创建表达式以对其进行不同的排序:

...
order by
  case when ProductDate < adddate(month, -3, getdate()) then 1 else 2 end,
  case when ProductDate < adddate(month, -3, getdate()) then ProductDate else null end desc,
  case when ProductDate < adddate(month, -3, getdate()) then null else ProductName end
。。。
订购人
当ProductDate
使用MySQL语法:

select * from Products order by DateColumn > curdate() - interval 3 month desc, ProductName;

不需要在第二列和第三列排序。@Thilo:是的,有。否则所有的记录都会按日期排序。我觉得很愚蠢。我读了你的问题后加了一条评论。我不知道这是否可能。但是,即使是这样,两个不同的查询也会更容易阅读代码吗?两个单独的查询也会更快,特别是如果您不需要显示“其余的”(因为它只从第4页开始)。如果“ProductDate”是时间戳还是日期戳,这有关系吗?您使用的是哪种RDBMS?假设您使用的是SQL Server,那么您就无法计算出记录是何时使用时间戳创建的—它没有对日期或时间进行编码—它只是一个递增的数字。据我所知,任何RDBMS中都没有日期戳数据类型。只需签入phpMyAdmin,类型为DATETIME。我似乎无法使上述各项发挥作用。我将对我的问题进行编辑
select * from Products order by DateColumn > curdate() - interval 3 month desc, ProductName;