取得する必要があるメタ キーのセットが固定されている場合 (固定された順序である必要はありません)、ピボット テーブルと同様の手法を使用して、クエリ自体でそれを行うことができます。
SELECT
post_id,
MAX(CASE WHEN meta_key = '_billing_first_name' THEN meta_value ELSE NULL END) AS _billing_first_name,
MAX(CASE WHEN meta_key = '_billing_last_name' THEN meta_value ELSE NULL END) AS _billing_last_name,
MAX(CASE WHEN meta_key = '_some_other_attribute' THEN meta_value ELSE NULL END) AS _some_other_attribute,
MAX(CASE WHEN meta_key = '_another_attribute' THEN meta_value ELSE NULL END) AS _another_attribute,
...
...
FROM wp_post_meta
GROUP BY post_id
ステートメントは、プルするパラメーターを決定し、CASE
それを列に割り当てます。これらはMAX()
、キーが一致しない場合に生じる NULL を単に排除するために集約でラップされ、ほぼ NULL 値を持つ複数の行ではなく、各属性の列を持つ 1 つの行に折りたたまれます。
これに失敗すると (属性のセットが予期せず変化する場合)、コードを反復処理する必要があります。それは面倒だろうけど。
PHP の場合:
PHP を使用して、取得したいメタ ポスト キーの配列がある場合は、すべての行をループして、必要な行である場合は配列meta_key
に格納できます。meta_value
// Assumes your WP query results are already stored into the array $your_db_rows
// Will hold your final processed results
$output = array();
// If you want only a specific set of meta_key names rather than all meta_key names
$keys_you_want = array('_billing_first_name','_billing_last_name','_some_other_attribute');
// Loops over the result set
foreach ($your_db_rows_array as $row) {
// If the current row holds one of the meta_key you are looking for
if (in_array($row['meta_key'], $keys_you_want)) {
// Put it onto the output array using the meta_key as the array key
$output[$row['meta_key'] = $row['meta_value'];
}
// Otherwise do nothing...
}
var_dump($output);
すべてを取得するには、テストと配列meta_key
を除外します。それは遭遇したすべてをに保存します。in_array()
$keys_you_want
meta_key
$output
// Loops over the result set for all values of meta_key, not a specific set
foreach ($your_db_rows_array as $row) {
// Put it onto the output array using the meta_key as the array key
$output[$row['meta_key'] = $row['meta_value'];
}
var_dump($output);