[英]PHP MYSQL Union Query
我是mysql查詢的新手,無法獲取所需的數據結構。 我希望你們中的一員能提供幫助。
我有以下查詢:
SELECT *
FROM wp_postmeta
WHERE post_id IN (SELECT id from wp_posts WHERE post_type = 'product')
它只是從表2中獲取與表1中的產品具有相同ID的所有數據。問題是結果返回為:
{meta_id: "37230", post_id: "2549", meta_key: "total_sales", meta_value: "0"}
{meta_id: "37231", post_id: "2549", meta_key: "_virtual", meta_value: "no"}
{meta_id: "37232", post_id: "2549", meta_key: "_tax_status", meta_value: "taxable"}
{meta_id: "37233", post_id: "2549", meta_key: "_visibility", meta_value: "visible"}
{meta_id: "37234", post_id: "2549", meta_key: "_featured", meta_value: "no"}
{meta_id: "37235", post_id: "2549", meta_key: "_weight", meta_value: "0.50"}
{meta_id: "37236", post_id: "2549", meta_key: "_sku", meta_value: "HCS-DGMP"}
{meta_id: "37237", post_id: "2549", meta_key: "_product_attributes", meta_value: "a:0:{}"}
{meta_id: "37238", post_id: "2549", meta_key: "_regular_price", meta_value: "18.99"}
{meta_id: "37239", post_id: "2549", meta_key: "_sale_price", meta_value: ""}
如您所見,它們都具有相同的帖子ID,但是在單獨的對象中返回。 如何修改上面的查詢,以便所有查詢都返回一個對象? 我還將刪除meta_id
因為它沒有用。
從MySQL 5.7.22開始,您可以使用JSON_OBJECTAGG(key, value)
:
SELECT post_id, JSON_OBJECTAGG(meta_key, meta_value) AS meta_data
FROM wp_postmeta
WHERE post_id IN (SELECT id from wp_posts WHERE post_type = 'product')
GROUP by post_id
這將以key: value
對的形式將meta_data
作為JSON_OBJECT返回:
post_id | meta_data
2549 | {"_sku": "HCS-DGMP", "_weight": "0.50", "_virtual": "no", "_featured": "no", "_sale_price": null, "_tax_status": "taxable", "_visibility": "visible", "total_sales": "0", "_regular_price": "18.99", "_product_attributes": "a:0:{}"}
如果您的服務器不支持JSON_OBJECTAGG()
,我將使用PHP解決方案:
$postIds = array_unique(array_column($dbResult, 'post_id'));
$posts = [];
foreach ($postIds as $id) {
$posts[$id] = (object)['id' => $id];
}
foreach ($dbResult as $row) {
$posts[$row->post_id]->{$row->meta_key} = $row->meta_value;
}
echo json_encode(array_values($posts), JSON_PRETTY_PRINT);
結果:
[
{
"id": "2549",
"total_sales": "0",
"_virtual": "no",
"_tax_status": "taxable",
"_visibility": "visible",
"_featured": "no",
"_weight": "0.50",
"_sku": "HCS-DGMP",
"_product_attributes": "a:0:{}",
"_regular_price": "18.99",
"_sale_price": ""
}
]
只要您不處理數千行,我就不必擔心性能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.