0

私はこれまでにこのクエリを持っています:


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以上のエントリがある場合、パフォーマンスが問題になると思います...

4

1 に答える 1

1

クエリ全体を次のようなものにフィードします。

SELECT ID
,      MAX(CASE WHEN meta_key = 'property_region' THEN meta_value END) AS property_region
,      MAX(CASE WHEN meta_key = 'property_bedrooms' THEN meta_value END) AS property_bedrooms
FROM (your query)
GROUP BY ID
HAVING MAX(CASE WHEN meta_key = 'property_region' THEN meta_value END) = 'east'
AND    MAX(CASE WHEN meta_key = 'property_bedrooms' THEN meta_value END) = 4

編集:HAVING句。醜いですが、あなたが探しているものだと思います。それでもphpコードでビルドする必要がありますが、必要なものが得られるはずです。

于 2010-10-26T18:35:55.297 に答える