【问题标题】:MySql query or merge array into 1MySql 查询或合并数组为 1
【发布时间】:2023-03-26 13:49:01
【问题描述】:

我使用 ACF Pro,在数据库 wp_postmeta 中我有 2 个 meta_keydich_vu_%_name_servicedich_vu_%_price_service。两者都有 value ,所以我如何查询并将其返回为 (dich_vu_%_name_service,dich_vu_%_price_service)。或者,如果 MySQL 无法处理它,那么我如何将这些查询的 2 个数组合并为一个这样的数组?

array(objects(['name_service'] => Test,['price_service'] => 9999))

这是我尝试过的代码

function getAllFaqs() {
global $wpdb;
    $results = $wpdb->get_results( $wpdb->prepare( 
    "SELECT DISTINCT meta_value FROM {$wpdb->prefix}posts,{$wpdb->prefix}postmeta WHERE meta_key LIKE %s AND post_name = %s",
    'dich_vu_%_name_service',
    'bang-gia-dich-vu'
));
    $results2 = $wpdb->get_results( $wpdb->prepare( 
    "SELECT DISTINCT meta_value FROM {$wpdb->prefix}posts,{$wpdb->prefix}postmeta WHERE meta_key LIKE %s AND post_name = %s",
    'dich_vu_%_price_service',
    'bang-gia-dich-vu'
));

    $array = array();
    foreach ($results as $result) {
        $array[]['name_service'] = $result->meta_value;
    }
    $array = $array;
    $array2 = array();
    foreach ($results2 as $result2) {
        $array2[]['price_service'] = $result2->meta_value;
    }
    $array2 = $array2;
    $array3 = array_combine($array,$array2);

感谢您的帮助!

【问题讨论】:

    标签: php mysql arrays wordpress


    【解决方案1】:

    联合是你的朋友,你可以将这两个查询结合起来(记住,两个结果集必须具有相同的列数和相同的类型并按顺序排列):

    $query1 = $wpdb->prepare( 
        "SELECT DISTINCT meta_value FROM {$wpdb->prefix}posts,{$wpdb->prefix}postmeta WHERE meta_key LIKE %s AND post_name = %s",
        'dich_vu_%_name_service',
        'bang-gia-dich-vu'
    );
    $query2 = $wpdb->prepare( 
        "SELECT DISTINCT meta_value FROM {$wpdb->prefix}posts,{$wpdb->prefix}postmeta WHERE meta_key LIKE %s AND post_name = %s",
        'dich_vu_%_price_service',
        'bang-gia-dich-vu'
    );
    
    $results = $wpdb->get_results( $query1.' UNION '.$query2);
    

    查看docs

    P.S:我不知道 wordpress,但看到 prepare 返回经过清理的查询字符串,因此两者之间的 UNION 应该可以工作

    【讨论】:

      【解决方案2】:

      为什么你让它变得如此复杂。只需像这样作为 WordPress 标准使用

      global $wpdb;
      // Instead of passing post slug, you need to use post id here
      $myvals1 = get_post_meta($post->ID,"dich_vu_%_name_service", true);
      $myvals2 = get_post_meta($post->ID,"dich_vu_%_price_service", true);
      
      $obj = new StdClass();
      $obj->name_service = $myvals1;  
      $obj->price_service = $myvals2;  
      
      $res = array($obj);
      
      // result 
      array(1) {
        [0]=>
        object(stdClass)#245 (2) {
          ["name_service"]=>
          string(4) "Test"
          ["price_service"]=>
          string(4) "9999"
        }
      }
      

      【讨论】:

      • array(1) { [0]=> object(stdClass)#2145 (2) { ["name_service"]=> array(6) { [0]=> object(stdClass)# 2157 (1) { ["meta_value"]=> string(3) "ACF" } [1]=> object(stdClass)#2156 (1) { ["meta_value"]=> string(24) "三重测试" } } ["price_service"]=> array(6) { [0]=> object(stdClass)#2151 (1) { ["meta_value"]=> string(6) "15000" } [1]=> object (stdClass)#2150 (1) { ["meta_value"]=> string(7) "19000" } } } }
      • 它向我展示了那样。但我想要这样:array(2) { [0]=> object(stdClass)#2145 (2) { ["name_service"]=>string(3 ) "ACF" ["price_service"]=>string(6) "150000" } [1]=> object(stdClass)#2145 (2) { ["name_service"]=>string(3) "三重测试" [ "price_service"]=>string(6) "150000" } }
      • 你能告诉我'bang-gia-dich-vu'帖子有多少个像'dich_vu_%_name_service'这样的mata键吗?因为单个帖子的元键是唯一的。您想合并所有帖子中的所有两个键吗?
      • 它可能有几百个或几千个 dich_vu_%_name_service 和 dich_vu_%_price_service,但 bang-gia-dich-vu 只是我使用 ACF 转发器字段的页面。它是商店名称服务和价格服务。我只想将 dich_vu_%_name_service 和 dich_vu_%_price_service 的所有值合并为一个类似于上面的格式,这样我就可以循环它并将数据获取到 html 表中。
      • 我只想合并一篇文章/页面。
      猜你喜欢
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 2012-07-02
      • 1970-01-01
      • 2021-10-01
      • 1970-01-01
      • 2021-04-29
      相关资源
      最近更新 更多