2017-08-21 2 views
-3

私はPHPでデータベースからコンテンツを取得するために次のクエリを使用する検索ページを持っています。ここでPHP SQLの検索クエリの照合

SELECT * FROM linkBase WHERE (`title` LIKE '%".$s."%') OR (`descr` LIKE '%".$s."%') 

が私のDBがどのように見えるかです:

id |title   |descr 
----------------------------------------- 
1 |Hello World |This is a hello world description 
2 |PiedPiper  |The silicon valley company PiedPiper 
3 |StackOverflow |Ask questions on programming 

私は$s = "silicon valley"の値でこのクエリを実行する場合、例えば、そして、それはrow 2をフェッチします。これは問題ありません。しかし、ユーザーがsilicon PiedPiperという検索語を入力するとどうなりますか?上記のSQLクエリでは結果は返されません。 2番目の検索語句を使用してrow 2を返すような方法でクエリを変更するにはどうすればよいですか。夏

質問: がどのように結果は、ユーザーがDBに互いにその結果として配置されていない2つの単語を入力しても返されるようにPHPとSQLを使用した検索クエリを行うことができます

+0

[MySQL](https://dev.mysql.com/doc/refman/5.7/en/)と[SQL Server](https://docs.microsoft.com/en-us/sql/t- sql/language-reference)は、異なる企業によって作成された異なるソフトウェアパッケージです。両方ともSQLを実装していても、SQLをさまざまな方法で拡張します。また、異なる構文規則を使用して、クエリ間で互換性がない場合もあります。使用しているソフトウェアと一致するタグのみを使用してください。 – axiac

+1

'$ s'の'% '記号でスペースを置き換えてください... –

+0

このコードでは、SQLインジェクションに注意してください。代わりにパラメータ化されたクエリを使用してみてください。 – MrApnea

答えて

0

LIKE '%{ "$ sの。"}%' または古い学校のINSTRなるように(title、 '{'。$ sの。 '}')> 0

1

あなたは、任意のをサポートする必要がある場合検索の単語の順番は、REGEXPの単純な "または"正規表現を使用して

SELECT * FROM linkBase WHERE (`title` REGEXP 'silicon|PiedPiper') OR (`descr` REGEXP 'silicon|PiedPiper') 

したがって、空白をPHPで置き換え、パイプ記号(|)で置き換えることができます。単語の順序はこれ以上は関係ありません。

これは、少なくとも1つの単語を含むすべての行を選択します。リスト内のすべての単語を一致させる必要がある場合は、別の正規表現が必要な場合があります。