wordpress の SQLで 複数カテゴリの絞り込み検索を行いたいのですが、どういうSQLにすれば良いのかわからないので、
教えてください。
・やりたいこと
複数カテゴリがあり、それぞれカテゴリ絞り込み検索を行いたい。
例
関東エリアすべて -> 20代30代 -> シニア30代 -> シニア
東京エリア -> 20代
神奈川エリア -> 30代~40代 -> テニス
PHP
1 if( $area == -1 || $area == null ){ 2 $area_query = "n.meta_value REGEXP('(関東エリアすべて|東京エリア|神奈川エリア|千葉エリア|埼玉エリア|名古屋エリア|関西エリアすべて|大阪エリア|神戸エリア|京都エリア|福岡エリア|札幌エリア)')"; 3 }else{ 4 $area_query = "area.meta_value LIKE %s"; 5 } 6 7 if( $age == -1 || $age == null ){ 8 $age_query = "age.meta_value REGEXP('(20代~30代中心|30代~40代中心|40代~50代中心|50代~60代中心|60代~70代中心)')"; 9 }else{ 10 $age_query = "age.meta_value LIKE %s"; 11 } 12 13 if( $circle == -1 || $circle == null ){ 14 $circle_query = "circle.meta_value REGEXP('(シニア|テニス|カラオケ|スノボ・スキー|異業種交流|アウトドア|料理|ダーツ)')"; 15 }else{ 16 $circle_query = "circle.meta_value LIKE %s"; 17 } 18 19 // SQLクエリ 20 $where .= $wpdb->prepare(" 21 AND EXISTS ( 22 SELECT 23 m.meta_id, 24 m.post_id, 25 date.meta_key, 26 date.meta_value as date, 27 age.meta_value as age, 28 circle.meta_value as circle 29 30 FROM {$wpdb->postmeta} as m 31 32 JOIN {$wpdb->postmeta} as date 33 ON m.post_id = date.post_id 34 AND date.meta_key = 'date' 35 AND ( date.meta_value >= %s AND date.meta_value <= %s ) 36 37 JOIN {$wpdb->postmeta} as age 38 ON m.post_id = age.post_id 39 AND age.meta_key ='age' 40 AND ".$age_query." 41 JOIN {$wpdb->postmeta} as circle 42 ON m.post_id = circle.post_id 43 AND circle.meta_key ='circle' 44 AND ".$circle_query." 45 WHERE m.post_id = {$wpdb->posts}.ID 46 47 48 49 )", 50 $sdate, 51 $edate, 52 $age, 53 $circle 54 ); 55 return $where; 56}
あなたの回答
tips
プレビュー