MySql 查询或合并数组为 1
Posted
技术标签:
【中文标题】MySql 查询或合并数组为 1【英文标题】:MySql query or merge array into 1 【发布时间】:2016-11-10 18:45:00 【问题描述】:我使用 ACF Pro,在数据库 wp_postmeta
中我有 2 个 meta_key
:dich_vu_%_name_service
和 dich_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->prefixposts,$wpdb->prefixpostmeta 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->prefixposts,$wpdb->prefixpostmeta 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);
感谢您的帮助!
【问题讨论】:
【参考方案1】:联合是你的朋友,你可以将这两个查询结合起来(记住,两个结果集必须具有相同的列数和相同的类型并按顺序排列):
$query1 = $wpdb->prepare(
"SELECT DISTINCT meta_value FROM $wpdb->prefixposts,$wpdb->prefixpostmeta 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->prefixposts,$wpdb->prefixpostmeta 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 表中。 我只想合并一篇文章/页面。以上是关于MySql 查询或合并数组为 1的主要内容,如果未能解决你的问题,请参考以下文章