gpt4 book ai didi

php - 如何使用 mysql 查询仅订购价格与促销价格之间价格比最大的产品

转载 作者:行者123 更新时间:2023-12-01 00:40:38 25 4
gpt4 key购买 nike

我有这个问题:

SELECT id,bg_product_name,product_price,promo_price FROM products 
WHERE active="1" order by ((product_price / promo_price) > 0) ASC limit 5

示例记录:

#id #bg_product_name  #product_price  #promo_price
74 Jewellery 30.00 28.00
75 Jewellery1 20.00 0.00
76 Jewellery2 30.00 25.00

等等。我的查询返回记录,但它们未按最大价格差异排序。

完整查询:

SELECT 
p.id, bg_product_name, unique_name, product_price, promo_price,
promo_end_date, available_qty, model, p.added_date, url, bg_category, free_delivery,
free_option,supplier_name,link_name, (product_price / promo_price) as p_ratio
FROM
products p, products_to_categories ptc, products_to_adverts pta, products_categories pc, adverts a
WHERE
p.id=ptc.product_id and ptc.category_id="156" and ptc.category_id=pc.id
and p.active="1" having p_ratio > 0 and p.instock="1" and p.id=pta.product_id and
available_qty > 0 AND pta.advert_id=a.id AND
pta.advert_id not in (0)
GROUP BY ptc.product_id order by p_ratio DESC,p.updated_date DESC LIMIT 5

最佳答案

您可以使用 WHERE 子句,而不是接受的答案中的 HAVING 子句,这在大多数情况下性能更好......在一种情况下:没有负 (promo_) 价格(一个合理的假设,我想吗?)
在这种情况下,您只需注意一个值:promo_price==0,如您的 Jewellery1 示例中所示。该记录的“比率”为 20.0/0.0 -> NULL。 promo_price 的任何其他值都会导致比率为正数。
因此,在完成其他操作之前,只需过滤掉 promo_price=0.0 的记录即可。

SELECT
id,bg_product_name,product_price,promo_price, (product_price/promo_price) as ratio
FROM
products
WHERE
active="1"
AND promo_price > 0
ORDER BY
ratio ASC
LIMIT
5

或者甚至更好:还保留列表中具有 promo_price=0 的记录,但为比率分配一个不同的值,例如

SELECT
id,bg_product_name,product_price,promo_price,
if(promo_price>0, product_price/promo_price, 'free as in beer') as ratio
FROM
products
WHERE
active="1"
ORDER BY
ratio ASC
LIMIT
5

关于php - 如何使用 mysql 查询仅订购价格与促销价格之间价格比最大的产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33449154/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com