我被要求在网站上订购产品,以便在过去3个月内首先显示任何产品(从最近的产品开始),然后是其他产品。目前该网站是按类编写的,目前产品按日期添加。为了减少工作量,我想知道上述是否可以在一个SQL查询中完成?我认为它需要2个单独的查询,但我不是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
获取错误 MySQL服务器版本以便在'date_added'附近使用正确的语法&lt; 3 THEN date_added ELSE NULL,prod_name LIMIT 0,6'在第11行
谁知道为什么?答案 0 :(得分:3)
您可以使用CASE语句将超过3个月的所有产品日期视为相等。
伪代码(近似于T-SQL的东西)
SELECT ProductName, ProductDate
FROM Products
ORDER BY
CASE WHEN DATEDIFF ('m', GETDATE(), ProductDate) < 3 THEN ProductDate
ELSE NULL,
ProductName
答案 1 :(得分:1)
使用MySQL语法:
select * from Products order by DateColumn > curdate() - interval 3 month desc, ProductName;
答案 2 :(得分:0)
您不需要两个单独的查询。您可以创建一个表达式,首先对最近的产品进行排序,然后使用表达式对它们进行不同的排序:
...
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