2017-02-09 12 views
0

例えば:私は含むレコードを返す必要があるだろう全部または一部の文字列 - 検索機能

$test = 'My name is' 

:「私の名前は」OR「私の」OR「名」OR「」です。

MySQLには、この種のタスク用の関数や正規表現がいくつかあります。

答えて

0

次のように使用したクエリ:

select * from tbl_name where name like '%my%' OR name like '%name%' OR name like '%is%'; 
+0

例は一定で検索。タイプされた文字列が '今夜のためのニュースをチェックする'のようなものなら、私は何かが必要です。 – Poo123

+0

SQLを動的に構築することができます。しかしそれは別の話題です。 –

1

あなたが例えばpattern matching in Mysql

あなたのケースのための

SELECT * FROMテーブルwhere title REGEXP "some regex pattern"

についての詳細を読む必要があり、それこのような多分いくつかのこと:

あなたのmy.cnfに ft_min_word_lenを設定する必要があります

SELECT * FROM search 
WHERE MATCH(mytext) AGAINST('my name sample' IN BOOLEAN MODE); 

:3210

SELECT * FROM `table` where title REGEXP "(My|name|is)" 
+0

FULL TABLE SCANなので、インデックスの使用はありません –

+0

uhmmmありがとうございます@BerndBuffen、しかし、私は彼がそのような重要なことを言わなければならなかったと思います。 – hassan

+0

私は全文検索で答えを書いています。あなたはまた、最良の結果を得るために結果を秤量することができます –

1

また、このようにInnoDB内で全文検索を使用することができます。デフォルトは4

に設定されているFULLTEXT検索から説明がある:https://mariadb.com/kb/en/mariadb/fulltext-index-overview/

サンプルテーブル

CREATE TABLE `search` (
    `id` INT(10) UNSIGNED NOT NULL, 
    `mytext` TEXT, 
    PRIMARY KEY (`id`), 
    FULLTEXT KEY `ft_mytext` (`mytext`) 
) ENGINE=INNODB DEFAULT CHARSET=utf8; 

を作成し、すべての表示及び所定の

mysql> select * from search; 
+----+-----------------------------------------------------+ 
| id | mytext            | 
+----+-----------------------------------------------------+ 
| 0 | Sample text includes My name is and much more text | 
| 1 | Only name in it          | 
| 2 | now is includet sample        | 
| 3 | nothing of them in string       | 
+----+-----------------------------------------------------+ 
4 rows in set (0,00 sec) 

mysql> SELECT * FROM search 
    -> WHERE MATCH(mytext) AGAINST('my name sample' IN BOOLEAN MODE); 
+----+-----------------------------------------------------+ 
| id | mytext            | 
+----+-----------------------------------------------------+ 
| 0 | Sample text includes My name is and much more text | 
| 1 | Only name in it          | 
| 2 | now is includet sample        | 
+----+-----------------------------------------------------+ 
3 rows in set (0,00 sec) 

mysql> SELECT * FROM search WHERE MATCH(mytext) AGAINST('sample nothing' IN BOOLEAN MODE); 
+----+-----------------------------------------------------+ 
| id | mytext            | 
+----+-----------------------------------------------------+ 
| 3 | nothing of them in string       | 
| 0 | Sample text includes My name is and much more text | 
| 2 | now is includet sample        | 
+----+-----------------------------------------------------+ 
3 rows in set (0,00 sec) 

mysql> 
+0

mysqlではmysqlバージョン<5.6の全文検索のみを使用でき、5.6より大きいバージョンのinnodbエンジンは全文検索をサポートします – hassan

+0

正直、ありがとう –

関連する問題