在一个基于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对结果
这是代码:
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关联起来,等等。
在这个早期阶段,我的逻辑失败在哪里?谢谢你的帮助。
发布于 2015-11-12 13:38:28
我不确定我是否完全理解您的SQL,但您能使用左连接而内连接吗?
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"我觉得这会对你有帮助。也请读连接之间的不同。
如果除了结果之外,它不会有帮助,那么您可以尝试使用按组来改进结果
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.IDhttps://stackoverflow.com/questions/33672531
复制相似问题