私がSQLスキルを持っていなかったので、ここで私は自分の進路を邪魔されました。
私はpost_id、post_titleおよび2つのpostmeta値を選択しようとしています - 最初のものは 'search_country'のmeta_key、そしてもう一つは 'search_region'のmeta_keyです。
私はちょうどsearch_countryを取得するための実用的な解決策があると思います:
$querystr = "
SELECT $wpdb->posts.ID as id, $wpdb->posts.post_title as title, $wpdb->postmeta.meta_value as country
FROM $wpdb->posts, $wpdb->postmeta
WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id
AND $wpdb->postmeta.meta_key = 'search_country'
AND $wpdb->posts.post_status = 'publish'
AND $wpdb->posts.post_type = 'films'
AND $wpdb->postmeta.meta_value IS NOT NULL
ORDER BY $wpdb->posts.post_title ASC
";
$festivals = $wpdb->get_results($querystr, OBJECT);
しかし、私はsearch_regionも取得するためにこれを変更する方法を知りませんか?
私はSQLに慣れたことがない:)
post_meta
テーブルを、各メタ値に対して1回ずつ、posts
name__テーブルに2回結合する必要があります。
SELECT p.ID id, p.post_title title, country.meta_value country, region.meta_value region
FROM {$wpdb->posts} p
JOIN {$wpdb->postmeta} country
ON p.ID = country.post_id AND country.meta_key = 'search_country'
JOIN {$wpdb->postmeta} region
ON p.ID = region.post_id AND region.meta_key = 'search_region'
WHERE
p.post_status = 'publish'
AND p.post_type = 'films'
ORDER BY p.post_title ASC
テーブル(p
name __、country
name __、region
name__)のエイリアスを作成して、同じテーブルを2回結合するときに読みやすくすることをお勧めします。同時に別のmeta_value
が必要な場合は、post_meta
テーブルにさらに追加できます。
JOIN
name__を使用すると、投稿に両方のメタキーの値がある場合にのみ結果が返されます。一方をNULL
name__にしたい場合は、代わりにテーブルをLEFT JOIN
にします。