复杂选择具有多个条件和订单的查询

时间:2012-10-26 08:08:02

标签: mysql select subquery left-join multiple-tables

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

Please check the output in fiddle

我想要现有的条件,以及下面列出的一些附加条件:

  1. 在此输出中,我首先显示了提供的产品(此后很重要)
  2. 我想要新产品 - 基于todaysDate - p.pdate less than 30 days
  3. 排序
  4. 然后显示拥有p.pre != ''
  5. 的产品
  6. 然后告诉他们谁没有价格即。 p.price ==0
  7. 然后按prod_id DESC
  8. 排列其他产品

    我希望所有人都能在这个现有查询中添加这5个点

    我希望你遇到问题。我需要立即回复。 提前致谢

2 个答案:

答案 0 :(得分: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天的行会发生什么?排除?进入下一个排序级别?

我已经猜到了你的意思。如果我误解了,我相信你可以使用查询。

答案 1 :(得分: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