0

我有一个favorite有 4 列的表

  • employee_id
  • product_id
  • frequency
  • last_consumed_date

现在我得到了最高的 6 行,frequency最少employee_idfrequency6 行。

employee_id以1为例

SELECT * FROM `favorites` 
WHERE `employee_id` = 1
AND `frequency` >= 6
ORDER BY `frequency` DESC LIMIT 0,6

到现在为止还挺好!

但是现在我想last_consumed_date在一个月(30天)内更喜欢这些行,所以我必须做一些事情:

DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= `lastchanged`

这是一个表格示例,以使其更清楚
表格已填充:

1   5 11  2012-10- 3  
1  13  8  2012-11- 7  
1  18 20  2012- 9-25
1  42 10  2012-11- 3
1  28 15  2012-10-17
1   9  7  2012-10- 8
1  64  9  2012-11- 1
2  24  8  2012- 8-28
2  12  5  2012-10-16
2   5 12  2012-11-11

Today is 2012-11- 8
30 days back 是2012-10- 9
SQL 后返回的 Table:

1  28 15  2012-10-17 <Sorted by 30 days interval and frequency>
1  42 10  2012-11- 3 
1  64  9  2012-11- 1 
1  13  8  2012-11- 7 
1  18 20  2012- 9-25 <Sorted by frequency>
1   5 11  2012-10- 3 

现在的问题是,我如何在 1 个查询中订购这 2 个东西?首先是按日期排序(间隔 30 天),然后是按单独结果的频率排序(间隔内和所有其他)

4

1 回答 1

2

哦,我想我通过试错找到了答案^v^

SELECT * FROM `favorites` 
WHERE `employee_id` = 1
AND `frequency` >= 6
ORDER BY (DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= `lastchanged`) DESC,
    `frequency` DESC 
LIMIT 0,6

对于那些试图帮助的人!谢谢

于 2012-11-08T09:17:10.533 回答