如何使用wpdb和GROUP BY组合一个字段?

时间:2015-10-12 作者:user81828

我的函数中有以下代码。php中,我试图将woocommerce订单中的销售数量分组到产品上选择的变体中。我的问题是:

$uvuorderposts = $wpdb->get_results( 
    "
    SELECT p.ID, p.post_title, p.post_date, wcom.order_item_name, wcomm.meta_key, wcomm.meta_value, wcomm2.meta_key AS meta_key_qty, wcomm2.meta_value AS meta_value_qty, pm2.meta_value AS meta_value_location
    FROM $wpdb->posts AS p
    INNER JOIN $wpdb->postmeta AS pm ON p.ID = pm.post_id
    INNER JOIN $wpdb->woocommerce_order_items AS wcom ON p.ID = wcom.order_id
    INNER JOIN $wpdb->woocommerce_order_itemmeta AS wcomm ON wcom.order_item_id = wcomm.order_item_id
    INNER JOIN $wpdb->woocommerce_order_itemmeta AS wcomm2 ON wcom.order_item_id = wcomm2.order_item_id
    INNER JOIN $wpdb->woocommerce_order_itemmeta AS wcomm3 ON wcom.order_item_id = wcomm3.order_item_id
    INNER JOIN $wpdb->postmeta AS pm2 ON pm2.post_id = wcomm3.meta_value
    WHERE (p.post_type = \'shop_order\')
    AND (pm.meta_key = \'_wc_authorize_net_aim_charge_captured\')
    AND (pm.meta_value = \'yes\')
    AND (wcomm.meta_key = \'_product_id\')
    AND (wcomm.meta_value = \'4034\')
    AND (wcomm2.meta_key = \'_qty\')
    AND (wcomm3.meta_key = \'_variation_id\')
    AND (pm2.meta_key = \'attribute_pa_seminar-location\')
    ORDER BY p.post_date
    "
);

echo "<table>";
foreach ( $uvuorderposts as $uvuorderpost ) 
{
    echo "<tr bgcolor=\'#eaeaea\'><td colspan=\'2\'>" . $uvuorderpost->meta_key_qty . " : " .  $uvuorderpost->meta_value_qty . "</td></tr>";
    echo "<tr bgcolor=\'#eaeaea\'><td colspan=\'2\'>" . strtoupper($uvuorderpost->meta_value_location) . "</td></tr>";      
}
echo "</table>";
输出给我:

_qty : 1
WY
_qty : 1
WV
_qty : 1
GA
_qty : 1
GA
我需要的是:

_qty : 1
WY
_qty : 1
WV
_qty : 2
GA
我添加了pm2分组。meta\\u值,它去掉了第二个GA值,但没有合并\\u qty值。请帮助了解如何在返回的记录之间组合\\u qty值?

1 个回复
SO网友:user81836

让它工作

$uvusql = $wpdb->prepare( 
    "
    SELECT p.ID, p.post_title, p.post_date, wcom.order_item_name, wcomm.meta_key, wcomm.meta_value, wcomm2.meta_key AS meta_key_qty, wcomm2.meta_value AS meta_value_qty, pm2.meta_value AS meta_value_location
    FROM $wpdb->posts AS p
    INNER JOIN $wpdb->postmeta AS pm ON p.ID = pm.post_id
    INNER JOIN $wpdb->woocommerce_order_items AS wcom ON p.ID = wcom.order_id
    INNER JOIN $wpdb->woocommerce_order_itemmeta AS wcomm ON wcom.order_item_id = wcomm.order_item_id
    INNER JOIN $wpdb->woocommerce_order_itemmeta AS wcomm2 ON wcom.order_item_id = wcomm2.order_item_id
    INNER JOIN $wpdb->woocommerce_order_itemmeta AS wcomm3 ON wcom.order_item_id = wcomm3.order_item_id
    INNER JOIN $wpdb->postmeta AS pm2 ON pm2.post_id = wcomm3.meta_value
    WHERE (p.post_type = \'shop_order\')
    AND (pm.meta_key = \'_wc_authorize_net_aim_charge_captured\')
    AND (pm.meta_value = \'yes\')
    AND (wcomm.meta_key = \'_product_id\')
    AND (wcomm.meta_value = \'4034\')
    AND (wcomm2.meta_key = \'_qty\')
    AND (wcomm3.meta_key = \'_variation_id\')
    AND (pm2.meta_key = \'attribute_pa_seminar-location\')
    ORDER BY p.post_date
    "
);

$uvuorderposts = $wpdb->get_results( $uvusql, ARRAY_A );

 $uvugroups = array();
    $uvukey = "";
    $uvukeyc = 0;
    foreach ($uvuorderposts as $item) {
        $uvukey = $item[\'meta_value_location\'];
        if (!array_key_exists($uvukey, $uvugroups)) {
            $uvugroups[$uvukey] = array(
                \'id\' => $item[\'meta_value_location\'],
                \'qty\' => $item[\'meta_value_qty\'],
            );
        } else {
            $uvugroups[$uvukey][\'qty\'] = $uvugroups[$uvukey][\'qty\'] + $item[\'meta_value_qty\'];
        }
        $uvukeyc++;                       
    }

    print "<pre>";
    print_r($uvugroups);
    print "</pre>";

相关推荐

在WordPress中将MySQL表格元素显示为页面

我正试图建立一个WordPress网站,但我需要一个特定的功能,我还没有找到一个插件。我将要刮网站信息和张贴到数据库的信息(这已经处理)。但是,我想创建一个页面来显示所有信息的索引,然后创建一个唯一的页面来显示每个单独的元素(ddbb表的行)。有什么办法可以做到这一点吗??