首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP/ mySQL联接-结果中的多个重复行

PHP/ mySQL联接-结果中的多个重复行
EN

Stack Overflow用户
提问于 2015-11-12 13:27:43
回答 1查看 127关注 0票数 0

在一个基于wordpress的预订系统中,我试图找到所有事件的成人数量--这个信息存储在wp_woocommerce_order_itemmeta表中(例如meta_key=‘成人’,meta_value='6')。在phpmyadmin中,我可以在wp_woocommerce_order_itemmeta表中看到20行,其meta_key值为“成人”(即20次总预订)。但是,当我运行这段代码而不是打印20行时,每一行重复大约42次,所以我最终得到了840行(大约)

例如:

meta_key成人meta_value 6 meta_key Adul .诸若此类

而不是:

meta_key成人meta_value 6 meta_key成人meta_value 8 meta_key成人meta_value 11 meta_key成人meta_value 1 meta_key成人meta_value 1 meta_key meta_value 2以此类推,达到预期的20对结果

这是代码:

代码语言:javascript
复制
global $wpdb;
$results= $wpdb->get_results( '
select wp_woocommerce_order_itemmeta.meta_key, wp_woocommerce_order_itemmeta.meta_value
FROM wp_postmeta
inner JOIN wp_posts
ON wp_postmeta.post_id = wp_posts.ID
inner JOIN wp_woocommerce_order_items
ON wp_woocommerce_order_items.order_id = wp_posts.ID
inner JOIN wp_woocommerce_order_itemmeta
ON wp_woocommerce_order_itemmeta.order_item_id = wp_woocommerce_order_items.order_item_id
where 1=1
AND wp_woocommerce_order_itemmeta.meta_key ="Adults"
', OBJECT );
foreach ($results as $res2) {
foreach ($res2 as $key => $value) {
            echo "$key $value\n";
            }
}

如果我在SELECT中添加了DISTINCT,那么我就会输掉成年人数量相同的行,所以这不是我想要的。我只想打印出存在的20行,然后我可以将所有事件的成人数相加。

我需要连接,因为稍后我必须先检查预订是否完成(在wp_posts表中),我需要将post ID与order_ID关联起来,等等。

在这个早期阶段,我的逻辑失败在哪里?谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2015-11-12 13:38:28

我不确定我是否完全理解您的SQL,但您能使用左连接而内连接吗?

代码语言:javascript
复制
select wp_woocommerce_order_itemmeta.meta_key, wp_woocommerce_order_itemmeta.meta_value
FROM wp_postmeta
LEFT JOIN wp_posts
ON wp_postmeta.post_id = wp_posts.ID
LEFT JOIN wp_woocommerce_order_items
ON wp_woocommerce_order_items.order_id = wp_posts.ID
LEFT JOIN wp_woocommerce_order_itemmeta
ON wp_woocommerce_order_itemmeta.order_item_id = wp_woocommerce_order_items.order_item_id
where 1=1
AND wp_woocommerce_order_itemmeta.meta_key ="Adults"

我觉得这会对你有帮助。也请读连接之间的不同

如果除了结果之外,它不会有帮助,那么您可以尝试使用按组来改进结果

代码语言:javascript
复制
select wp_woocommerce_order_itemmeta.meta_key, wp_woocommerce_order_itemmeta.meta_value
FROM wp_postmeta
inner JOIN wp_posts
ON wp_postmeta.post_id = wp_posts.ID
inner JOIN wp_woocommerce_order_items
ON wp_woocommerce_order_items.order_id = wp_posts.ID
inner JOIN wp_woocommerce_order_itemmeta
ON wp_woocommerce_order_itemmeta.order_item_id = wp_woocommerce_order_items.order_item_id
where 1=1
AND wp_woocommerce_order_itemmeta.meta_key ="Adults"
GROUP BY wp_posts.ID
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33672531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档