gpt4 book ai didi

mysql - 从数据库中获取产品

转载 作者:行者123 更新时间:2023-11-29 07:12:53 25 4
gpt4 key购买 nike

我试图通过一次查询从数据库中获取所有产品。我卡在了价格部分:

VirtueMart 有一个名为#__vm_product 的表和另一个名为#__vm_product_price 的表。

如果产品有父产品,则意味着该产品继承父产品的所有内容,除非它在子产品中设置不同。

表格如下所示:

/* #__vm_product PARTIAL */
int - product_id
int - product_parent_id
varchar - product_name

/* #__vm_product_price PARTIAL */
int - product_id
decimal - product_price
int - mdate

我做了下一个查询,它获取所有产品及其价格:

SELECT
p.product_id AS id,
product_name AS name,
product_price AS price,
p.product_parent_id AS parent,
MAX(pp.mdate) AS last_updated

FROM jos_vm_product p
LEFT JOIN jos_vm_product_price pp ON p.product_id = pp.product_id

GROUP BY p.product_id
ORDER BY p.product_id

这个查询的问题在于它不检查它们是否是指定的价格。因此,如果它是子产品且没有价格,则应显示其父产品的价格。

有人可以帮我解决这个问题吗?

注意:如果有人知道从 VirtueMart 数据库中获取所有产品(带价格)的更简单方法,请不要介意告诉我:)

编辑:价格永远不会为空。如果子项应该从它的父项继承,它只是在 jos_vm_product_price 中没有价格行

最佳答案

更新:

select
p.product_id AS id,
p.product_name AS name,
coalesce(pp.product_price, pp2.product_price) AS price,
p.product_parent_id AS parent,
coalesce(pp.mdate, pp2.mdate) AS last_updated
from jos_vm_product p
left outer join jos_vm_product p2 on p.product_parent_id = p2.product_id
left outer join (
select product_id, max(mdate) as maxmdate
from jos_vm_product_price
group by product_id
) ppm on p.product_id = ppm.product_id
left outer join jos_vm_product_price pp on ppm.product_id = pp.product_id and ppm.maxmdate = pp.mdate
left outer join (
select product_id, max(mdate) as maxmdate
from jos_vm_product_price
group by product_id
) ppm2 on p2.product_id = ppm2.product_id
left outer join jos_vm_product_price pp2 on ppm2.product_id = pp2.product_id and ppm2.maxmdate = pp2.mdate

关于mysql - 从数据库中获取产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3415580/

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