質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

0回答

1975閲覧

wordpress の SQLで 複数カテゴリの絞り込み検索を行いたい

kiddman

総合スコア7

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2017/08/10 08:32

wordpress の SQLで 複数カテゴリの絞り込み検索を行いたいのですが、どういうSQLにすれば良いのかわからないので、
教えてください。

・やりたいこと
複数カテゴリがあり、それぞれカテゴリ絞り込み検索を行いたい。


関東エリアすべて -> 20代30代 -> シニア
東京エリア -> 20代
30代 -> シニア
神奈川エリア -> 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}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問