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

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

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

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

1回答

2330閲覧

CakePHP3でキーワード/除外キーワード検索の実装方法について

ssk

総合スコア332

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2017/08/16 03:37

編集2022/01/12 10:55

###前提・実現したいこと
複数キーワード、複数除外キーワード
での検索を実装しています。

###発生している問題・エラーメッセージ
NOT LIKEが動いていません。
サブクエリでNOT LIKEを生成する方法がよいかと思っています。
しかし、サブクエリの書き方がわかりません、、、

###該当のソースコード

PHP

1//複数キーワード 2//$freeword_str = 東京 大阪 3if(isset($freeword_str) && $freeword_str !== FALSE){ 4 $arr = []; 5 $freeword_str = mb_convert_kana($freeword_str, 's'); 6 $keywords = preg_split('/[\s]+/', $freeword_str, -1, PREG_SPLIT_NO_EMPTY); 7 8 $fileds = ['hoge01', 'hoge02', 'hoge03']; 9 10 foreach ($fileds as $filed) { 11 $clumn = sprintf('%s LIKE', $filed); 12 foreach ($keywords as $key => $value) { 13 $value = "%{$value}%"; 14 $arr[][$clumn] = $value; 15 } 16 } 17 18 $query->where(['OR' => $arr]); 19 } 20//複数除外キーワード 21//$exword_str = 渋谷区 目黒区 22 if(isset($exword_str) && $exword_str !== FALSE){ 23 $arr = []; 24 $freeword_str = mb_convert_kana($exword_str, 's'); 25 $keywords = preg_split('/[\s]+/', $exword_str, -1, PREG_SPLIT_NO_EMPTY); 26 27 $fileds = ['hoge01', 'hoge02', 'hoge03']; 28 29 foreach ($fileds as $filed) { 30 $clumn = sprintf('%s NOT LIKE', $filed); 31 foreach ($keywords as $key => $value) { 32 $value = "{$value}"; 33 $arr[][$clumn] = $value; 34 } 35 } 36 37 $query->where(['OR' => $arr]); 38 }

###追記
テーブル構成は以下の通りです。

masterテーブル

idnameform_idpre_idem_id
1会社名1111
2会社名2313
3会社名3321

master_formテーブル

idform_id
12
21
22
31
33

formテーブル

form_idname
1正社員
2派遣
3アルバイト

emテーブル

idname
1固定給
2時給
3歩合

preテーブル

idname
1東京
2大阪
3名古屋

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

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

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

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

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

guest

回答1

0

サブクエリの書き方について、下記参考になりますでしょうか。
※公式ではなく個人ブログのメモのため自身のコードにあわせた検証は必要です

また、生成されたSQLが想定どおりのものかは確認しておいたほうが良さそうですね。

投稿2017/08/17 01:01

m.ts10806

総合スコア80765

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

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

ssk

2017/08/22 03:36

ありがとうございます。 どのようなSQL文を書いたら良いかわからなかったので、一度そちらを質問いたしました。 また、こちらで詳細に質問することになるかと思いますが、、、 その際は助言の程よろしくお願いいたします。
m.ts10806

2017/08/22 04:06 編集

CakePHP3におけるサブクエリの書き方ではなくサブクエリ自体の書き方ということでしょうか?
ssk

2017/08/22 04:15

おっしゃる通りです。 まず、サブクエリの前にSQL文の書き方を再考する必要がありそうです。
m.ts10806

2017/08/22 04:18

となると、DBの情報を含めて色々と提示いただく必要がありそうです。 どういう構成でどういう定義で、どのようなインプットから情報を取得したいのかといった感じで。
ssk

2017/08/22 06:30

テーブル構成を追記いたしました。 データが数万件あるため、なるべく軽量化したいと思っています。。
ssk

2017/08/22 06:34

例)検索条件 複数キーワード:「東京 派遣」 除外キーワード:「時給 歩合」
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問