微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 postmeta 在 Wordpress 中查询自定义帖子类型

如何解决使用 postmeta 在 Wordpress 中查询自定义帖子类型

我正在尝试使用查询制作 wordpress代码。 我要查询产品在最后一天和上周的订单数量

我不知道如何按日期过滤(日期也是文本格式)。 非常感谢。

直到现在我都是这样做的:

表格:

post_id Meta_key 元值
164 订单日期 09-12-2020 18:17
164 order_items_5_order_product 巧克力
164 order_items_6_order_product 精神
165 订单日期 05-12-2020 14:35
165 order_items_1_order_product 巧克力
165 order_items_2_order_product 精神
165 order_items_3_order_product granizo
166 订单日期 02-10-2020 11:37
166 order_items_5_order_product 巧克力
166 order_items_6_order_product 精神

查询

SELECT Meta_value,COUNT(*) Totales_Pedidos FROM tc_10_postMeta um WHERE Meta_key LIKE "order_items_%_order_product" GROUP BY Meta_value ORDER BY Totales_Pedidos desc

结果:

Meta_key Totales_Pedidos
巧克力 3
精神 3
granizo 1

简码:

function fln_table_shortcode() {
 global $wpdb;
 $html = "";
 $result = $wpdb->get_results('SELECT Meta_value,COUNT(*) Totales_Pedidos FROM tc_10_postMeta um WHERE Meta_key LIKE "order_items_%_order_product" GROUP BY Meta_value ORDER BY Totales_Pedidos desc');
 $count = $wpdb->num_rows;
 if($count >0){
  $html .="<table>";    
    $html .="<tr><td><strong>PRODUCT</strong></td><td><strong>NUMBER OF ORDERS</strong></td></tr>";
    $html .="<tr>";
  foreach($result as $r){
    $html .="<td>".$r->Meta_value."</td>";
    $html .="<td>".$r->Totales_Pedidos."</td>";
    $html .="</tr>";
   }
  $html .="</table>";
}

return $html;
}
add_shortcode( 'table_shortcode','fln_table_shortcode');

解决方法

基本上你必须使用数据透视表和准备好的语句来生成动态表

CREATE TABLE tc_10_postmeta 
    (`post_id` int,`meta_key` varchar(27),`meta_value` varchar(16))
;
    
INSERT INTO tc_10_postmeta 
    (`post_id`,`meta_key`,`meta_value`)
VALUES
    (164,'order_date','09-12-2020 18:17'),(164,'order_items_5_order_product','chcolate'),'order_items_6_order_product','menta'),(165,'05-12-2020 14:35'),'order_items_1_order_product','order_items_2_order_product','order_items_3_order_product','granizo'),(166,'02-10-2020 11:37'),'menta')
;
SELECT
    `post_id`,MAX(IF(`meta_key` = 'order_date',STR_TO_DATE(`meta_value`,'%m-%d-%Y %H:%i'),NULL ))  as ORDERDate,SUM(IF(`meta_key`  LIKE "order_items_%_order_product" AND  `meta_value` = 'chcolate',1,0)) as 'chcolate',SUM(IF(`meta_key`  LIKE "order_items_%_order_product" AND  `meta_value` = 'menta',0)) as 'menta',SUM(IF(`meta_key`  LIKE "order_items_%_order_product" AND  `meta_value` = 'granizo',0)) as 'granizo'
FROM tc_10_postmeta
GROUP BY `post_id`
post_id | ORDERDate           | chcolate | menta | granizo
------: | :------------------ | -------: | ----: | ------:
    164 | 2020-09-12 18:17:00 |        1 |     1 |       0
    165 | 2020-05-12 14:35:00 |        1 |     1 |       1
    166 | 2020-02-10 11:37:00 |        1 |     1 |       0
SET @sql ='';
SELECT 
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'SUM(IF(`meta_key`  LIKE "order_items_%_order_product" AND  `meta_value` = "',`meta_value`,'",0)) AS "','"'      
    )
  ) 
  INTO @sql
FROM tc_10_postmeta
WHERE `meta_key`  LIKE "order_items_%_order_product";
SET @sql = CONCAT('select `post_id`,MAX(IF(`meta_key` = "order_date","%m-%d-%Y %H:%i"),',@sql,' from tc_10_postmeta
                  group by `post_id`');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

post_id | ORDERDate           | chcolate | granizo | menta
------: | :------------------ | -------: | ------: | ----:
    164 | 2020-09-12 18:17:00 |        1 |       0 |     1
    165 | 2020-05-12 14:35:00 |        1 |       1 |     1
    166 | 2020-02-10 11:37:00 |        1 |       0 |     1

dbfiddle here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。