私はこれまでにこのクエリを持っています:
if(!empty($_SESSION['s_property_region'])) {
$sqlWHERE .= " AND $wpdb->postmeta.meta_key = 'property_region' AND $wpdb->postmeta.meta_value = '".$_SESSION['s_property_region']."'";
}
if(!empty($_SESSION['s_property_bedrooms'])) {
$sqlWHERE .= " AND $wpdb->postmeta.meta_key = 'property_bedrooms' AND $wpdb->postmeta.meta_value = '".$_SESSION['s_property_bedrooms']."'";
}
$sql = "SELECT $wpdb->posts.ID
FROM $wpdb->posts
LEFT JOIN $wpdb->postmeta ON ($wpdb->posts.ID = $wpdb->postmeta.post_id)
WHERE $wpdb->posts.post_status = 'publish'
AND $wpdb->posts.post_type = 'property'
".$sqlWHERE."
ORDER BY $wpdb->posts.post_date DESC";
1つのカスタムフィールドを検索するだけで、2つを一緒に検索しない場合に機能します。左の結合が機能する理由とその理由を私は知っています。post_typeが一度に2つのものになる可能性がある行はありません。
参加後、Imは次のような構造を取得します。
| ID | meta_key | meta_value | | 1 | property_region | 東| | 1 | property_bedrooms | 4 | | 2 | property_region | 西| | 2 | property_bedrooms | 2 |
2つのテーブルを次のような構造に変換できるクエリはありますか?
| ID | property_region | property_bedrooms | | 1 | 東| 4 | | 2 | 西| 2 |
クエリでテーブルを上記のように表示できる場合は、単純なWHERE this = that AND this=thatが機能します。
この問題に関する助けは大歓迎です
ありがとう
スコット
編集:いくつかの検索の後、私は今このコードをまとめました:http: //pastebin.com/5YYDLyeRそれは動作し、私が求めている構造を返しますが、property_regionとproperty_bedroomsでWHEREを実行しようとするとすぐに:# 1054-'where句'の不明な列'property_bedrooms'
EDIT2:OK私はPMVコードを取り、WHERE句を実行できるようにするために、サブクエリを実行する必要がありました:http: //pastebin.com/dvTgsU7Sこのコードは私が望むことを実行しますが、より良い方法はありますかこのクエリを達成しますか?DBに1000以上のエントリがある場合、パフォーマンスが問題になると思います...