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

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

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

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

2回答

1572閲覧

PHPでのMySQLのAND検索が上手くいかない

nosonosolife

総合スコア42

MySQL

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2017/05/18 03:55

PHPで製作した電子掲示板にAND・OR検索機能を実装したのですが、AND検索が上手くいきません。

【例】書き込みのタイトルが「huga」、ハンドルネームが「hoge」、書き込み内容が「hogehuga」のデータがあるとします。
「hogehuga」というワードでは、AND・OR両方で上記のデータが検索結果に表示されます。
しかし、「hoge huga」と、間に全角・半角スペースを入れて検索すると、OR検索の場合では表示されますが、AND検索の場合では表示されません。

原因は何でしょうか。ご提示よろしくお願いいたします。

※下記のコードは重要な部分だけ抜き出しています

PHP

1$searchword = empty($_GET["searchword"])? null:$_GET["searchword"];//検索ワード 2$cond = $_GET["cond"];//検索タイプ 3 4if (!empty($searchword)){ 5$search_word = str_replace(' ', ' ', $searchword); 6$search_words = explode(' ', $search_word); 7 8$final_search_words = array(); 9if (count($search_words) > 0) { 10 foreach($search_words as $word) { 11 if (!empty($word)) { 12 $final_search_words[] = $word; 13 } 14 } 15} 16$where_list = array(); 17if (count($final_search_words) > 0) { 18 foreach($final_search_words as $word) { 19 $where_list[] = "'%$word%'"; 20 } 21} 22if($cond == "AND"){ 23 $where_clause = implode(' AND ', $where_list); 24}else{ 25 $where_clause = implode(' OR ', $where_list); 26} 27$sql = "select * from bbs_data where concat(user_name,' ',user_title,' ',user_mes) LIKE $where_clause";

html

1<form action="./search.php" id="searchform" method="get" name="search_form"> 2 <p> 3 <input id="searchword" name="searchword" type="text" size="40" value=""> 4 <input id="searchbtn" type="submit" value="検索"> 5 </p> 6 <p> 7 <input class="radio" type="radio" name="cond" value="AND" checked><small>AND</small>&nbsp; 8 <input class="radio" type="radio" name="cond" value="OR"><small>OR</small> 9 </p> 10</form>

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

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

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

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

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

guest

回答2

0

ベストアンサー

LIKEの考え方がまちがっていますね

値 LIKE '%a%' or '%b%'
値 LIKE '%a%' and '%b%'
などそもそも使えません。

値 LIKE '%a%' or 値 LIKE '%b%'
値 LIKE '%a%' and 値 LIKE '%b%'
ですね

めんどうならORは
値 REGEXP 'a|b'
のような正規表現に返ることができます

ANDは正規表現をつかっても
値 REGEXP 'a.*b|b.*a'
が限界かもしれません

投稿2017/05/18 04:09

yambejp

総合スコア114572

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

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

nosonosolife

2017/05/18 05:01

ご回答の内容を参考にしコードを書き直したところ正常に表示されました。 ありがとうございました。
guest

0

このように書き直した結果、正常に表示されました。

php

1if($cond == "AND"){ 2 $where_clause = implode(" AND concat(user_name,' ',user_title,' ',user_mes) LIKE ", $where_list); 3}else{ 4 $where_clause = implode(" OR concat(user_name,' ',user_title,' ',user_mes) LIKE ", $where_list); 5}

投稿2017/05/18 05:02

nosonosolife

総合スコア42

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問