【发布时间】:2012-01-25 22:25:34
【问题描述】:
我被要求在网站上订购产品,首先显示过去 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 附近使用正确的语法)
有人知道为什么吗?
【问题讨论】:
-
我觉得自己很愚蠢。在阅读并误解了您的问题后,我添加了评论。我不知道这是否可能。但即使是这样,使用两个不同的查询代码不是更容易阅读吗?
-
使用两个单独的查询也可能会更快,特别是如果您不需要显示“其余部分”(因为它只从第 4 页开始)。
标签: mysql sql-order-by case