0

4列のfavoriteテーブルがあります

  • employee_id
  • product_id
  • frequency
  • last_consumed_date

今、私は6の最小値で最高frequencyの6行を取得しています.employee_idfrequency

employee_id1の例

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

ここまでは順調ですね!

last_consumed_dateしかし、今は1か月(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

今日は2012-11- 8
30 日前です2012-10- 9
。SQL の後に返されるテーブルです。

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 に答える