0
SELECT p.*
FROM Products p
LEFT JOIN offertran ot 
ON p.prod_id = ot.prod_id

LEFT JOIN Offers o
       ON ot.offer_id = o.id
      AND o.dF<=3 
      AND o.dt>=3

ORDER BY o.id DESC, 
          p.prod_id ASC
LIMIT 20

フィドルで出力を確認してください

既存の条件をそのままにして、以下にリストされているようにさらにいくつかの条件を追加したい:

  1. この出力では、Offered products are shown first (これは重要です。この後)
  2. 私は新製品が欲しい - それはに基づいてソートされていますtodaysDate - p.pdate less than 30 days
  3. 次に、それらが持っている製品を表示しますp.pre != ''
  4. 次に、価格を持っていない人を表示します。p.price ==0
  5. 次に、他の製品を並べますprod_id DESC

この既存のクエリにこれらの 5 つのポイントを追加するために、オールインワンが必要です

問題が解決したことを願っています。早急な対応が必要です。前もって感謝します

4

2 に答える 2

1

これを試してください:

SELECT p.*, o.id
FROM Products p
LEFT JOIN offertran ot 
ON p.prod_id = ot.prod_id
LEFT JOIN Offers o
       ON ot.offer_id = o.id
      AND o.dF<=3 
      AND o.dt>=3
ORDER BY o.id DESC, 
case when p.pDate > curdate()-interval 30 day then p.pDate else '1970-01-01' end desc,
case when p.pre != '' then 1 else 0 end desc,
p.price asc,p.prod_id DESC
LIMIT 20;

ポイント2の意味が少しわかりません:

結果の日付を並べ替えますDESCASC? 日付が 30 日より古い行はどうなりますか? 除外しますか?次の並べ替えレベルにドロップしますか?

私はあなたが何を意味するのか推測しました。私が誤解している場合は、クエリをいじることができると確信しています。

于 2012-10-26T08:50:08.357 に答える
0

WHERE条件を追加するだけです...

SELECT p.*, o.id
FROM Products p
LEFT JOIN offertran ot 
ON p.prod_id = ot.prod_id

LEFT JOIN Offers o
       ON ot.offer_id = o.id
      AND o.dF<=3 
      AND o.dt>=3

WHERE datediff(curdate(),p.pdate)<30
      AND p.pre <> ''
      AND p.price = 0

ORDER BY o.id DESC, 
         p.prod_id ASC,
         prod_id DESC

LIMIT 20
于 2012-10-26T08:30:55.810 に答える