私は他の人のWPプラグインを使っています。これは "人工キー"を使ってwp_postmeta
にたくさんの関連データを格納しています。ネストされたリレーショナルデータベースを作成するためにwp_postmeta
を効果的にハイジャックします。 1行になります
meta_id = 999
post_id = 130
meta_key = 'event_id'
meta_value = '19'
それから、そのpost_idを共有する他の4つの実際のwp_postmeta行には、データのその仮想「行」に関する残りの情報が含まれています。例えば
meta_id = 989
post_id = 130
meta_key = 'Name'
meta_value = 'Fred'
そして、私たちは19のevent_id
を共有するたくさんの "仮想行"(何百も)を持つことになるでしょう(そしてもちろん、それら自身の異なるevent_id
sを持つ他のたくさんのもの)。
私は多くのSQLクエリを試してみましたが、私は困惑しています。一般的なevent_idの情報をグループ化したテーブルを取得する方法を教えてください。それはすべてのデータを持つ必要はありません、 'Name'フィールドのように1つの部分だけです。私はこのような副問い合わせを試みました:
SELECT meta_value from wp_postmeta
WHERE meta_key='name' AND
post_id IN
(SELECT post_id FROM wp_postmeta
WHERE meta_key='event_id' AND meta_value='19');
それはおそらく笑ってばかげて見える - それはまた働かない。私も参加してみました。これはWPのコーディングで大いに浮かび上がるもののように思えますが、私は検索して、ほとんど空っぽに出てきました。
私があなたの質問を正しく理解すれば、これはうまくいくはずです。
function get_event_info($event_id = 0, $info = '' ) {
global $wpdb;
return $wpdb->get_col(
$wpdb->prepare(
"SELECT meta_value from $wpdb->postmeta WHERE
meta_key = '%s' AND post_id IN
(SELECT DISTINCT post_id FROM $wpdb->postmeta WHERE meta_key = 'event_id' AND meta_value= %s )",
$info, $event_id
)
);
}
こんな感じで使う:
$names = get_event_info( 19 , 'Name' );
if ( ! empty($names) ) {
echo '<ul>';
foreach ($names as $name) {
echo '<li>' . $name . '</li>';
}
echo '</ul>';
}
2番目のパラメータがmeta_key
と正確に同じであることを確認してください。あなたの例のmeta_key = 'Name'
では、SQLクエリはWHERE meta_key='name'
です、大文字小文字の違いは異なります!
WP_Queryクラス のmeta_queryパラメータを使用して投稿を選択できます。共有のevent_idが19の投稿の投稿IDをすべて取得します。
後でそのIDを使用して、必要なデータをすべて入手することができます。
私は同じ問題に遭遇し、私がこのようにして欲しいものを多かれ少なかれ得るようになりました:
SELECT t.post_id, t.meta_value, u.meta_value
FROM `wp_postmeta` t INNER JOIN `wp_postmeta` u
ON t.post_id = u.post_id
WHERE
u.meta_key = 'first_key' AND
t.meta_key = 'second_key'