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. 在此输出中,我首先显示了提供的产品(这很重要,在此之后)
  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 点中的意思:

您想要对结果日期进行排序DESC还是ASC?那些日期超过 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 回答