2011-12-22 7 views
2

私は過去3ヶ月以内に最新のものから最初の製品を表示し、残りの製品をアルファベット順に表示するよう依頼されました。現在、サイトはクラスで書かれており、現在の製品は追加された日付順に並んでいます。作業負荷を最小限に抑えるために、私は上記の1つのSQLクエリで行うことができますか?私はそれは2つの別のクエリが必要になると思うが、私はSQLの専門家ではないので、これを行うことができたのだろうか?最後に3か月間、最初にアルファベット順

よろしく

フィル

"DATE_ADDED近くで使用する権利構文については、エラーMySQLサーバのバージョンを取得EDIT

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 

)< 3 THEN DATE_ADDED ELSE NULL、PROD_NAMEのLIMIT 0 、ライン11の6 '

誰でも知っている理由は?

+0

私は愚かな感じ。私はあなたの質問を読んだり、誤解したりして、コメントを追加しました。それが可能かどうかわかりません。しかし、たとえそれがあっても、コードは2つの異なるクエリで読みやすくなりますか? –

+0

2つの別々のクエリで高速化することもできます。特に、「残りの部分」を表示する必要がない場合は(4ページから始まるため) – Thilo

答えて

1

をMySQLの構文を使用して:あなたは、その後、式が異なり、それらを並べ替えるには、最初の最近の製品を並べ替え式を行うことができます

select * from Products order by DateColumn > curdate() - interval 3 month desc, ProductName; 
+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 
+0

"ProductDate"がTIMESTAMPまたはDATESTAMPの場合は重要ですか? –

+0

どのRDBMSを使用していますか? SQL Serverを使用していると仮定すると、TIMESTAMPを使用してレコードが作成されたときにはうまくいきません。日付または時刻をエンコードしません。私が知っているRDBMSには、DATESTAMPデータ型のようなものはありません。 –

+0

phpMyAdminでチェックしたところ、タイプはDATETIMEです。私は上記を動作させることができないようです。私は私の質問に編集を入れます –

0

あなたはそのための2つの別々のクエリを必要としません。

... 
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 
+0

2番目と3番目の並べ替えの列の場合は必要ありません。 – Thilo

+1

@Thilo:はい、あります。それ以外の場合は、すべてのレコードが日付順にソートされます。 – Guffa

関連する問題