gpt4 book ai didi

连接父列并具有多个内部连接的mysql查询

转载 作者:行者123 更新时间:2023-11-29 22:29:51 24 4
gpt4 key购买 nike

我正在使用 wordpress/woocommerce 数据库结构,并希望进行自定义查询。

基本上,我需要获取没有特定变体的所有产品,但我在加入 ID 时遇到了问题。

产品和产品变体都是具有关联帖子元帖子
示例架构:

wp_posts                  wp_postmeta

ID post_id
post_parent meta_key
post_type meta_value
post_status

wp_posts 表的示例如下所示:

id    name      post_parent    meta_key         meta_value
2 tshirt null
3 pants null
4 2 variation_type red
5 2 variation_type blue

这里您可以看到4个帖子; 2 种产品和 2 种变体。变体的 post_parent 指向产品。所以我有一件红色和蓝色的 T 恤

我需要的是获取所有带有蓝色变体的产品,这意味着我需要将 post_parent 添加到 id。

这就是我到目前为止所拥有的。

SELECT * FROM wp_posts wp1
INNER JOIN wp_postmeta pm1
ON (pm1.post_id = wp1.ID)
INNER JOIN wp_postmeta pm2
ON (pm2.post_id = wp1.ID)
JOIN wp_posts wp2
ON (wp2.post_parent = wp1.ID)
AND wp1.post_type = 'product_variation'
AND wp1.post_status = 'publish'
AND pm1.meta_key = 'groups-groups_read_post'
AND pm1.meta_value = 'vet_read'
AND pm2.meta_key = 'variation_type'
AND pm2.meta_value = 'blue'

我相信我的连接方式是错误的。任何指导表示赞赏。

最佳答案

这个过程非常复杂,因为幕后发生了很多事情。在我的一个项目中,我必须根据某个属性获取所有帖子 ID(主要产品 ID)。

SELECT
DISTINCT p.post_parent FROM `wp_posts` AS p
LEFT JOIN
`wp_postmeta` AS pm ON p.ID = pm.post_id
LEFT JOIN
`wp_postmeta` AS pm2 ON p.ID = pm2.post_id
WHERE
p.post_type = 'product_variation' AND
(
(pm.meta_key = 'attribute_pa_size' AND pm.meta_value = "XL") OR
(pm.meta_key = 'attribute_size' AND pm.meta_value = "XL")
) AND
pm2.meta_key = '_stock' AND pm2.meta_value != '0'

我有一个变体尺寸,我想购买具有此变体的产品,当然不会缺货。您会注意到我必须检查 meta_key 两次,因为当您在产品编辑器页面中输入属性时,woocommerce 会将其存储为 attribute_{$attribute_name} 并将其保存在属性部分。但是,如果您从之前保存的可用属性的下拉列表中选择它,则必须查找 attribute_pa_{$attribute_name}。我相信您可以根据您的要求修改此 SQL

注意:如果您打算将此自定义查询与 pre_get_posts 一起使用来设置 post__in 参数,那么遗憾的是它不起作用。 Woocommerce 有一个过滤器 loop_shop_post_in 来覆盖它。只是为了让您知道。

希望这对您有帮助。

关于连接父列并具有多个内部连接的mysql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29907140/

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