2016-12-21 7 views
0


私はユーザーが単純なデータベーステーブルから複雑な検索を実行できるようにしようとしています。入力がどちらかの「エステバン・モントーヤ」、「エステバン・ラ・ロサRemirez」、「ラミレス」などのときMySQLで姓と名を検索するにはどうすればよいですか?

 
id, name 
3, Esteban Julio Ricardo Montoya De la Rosa Ramirez 
4, Romeo Heartless 
5, Rick Testing Astley 
6, Never Going to Give 

は、どのように私は、それが可能なの行3を受け取るために作るのですか?アプリケーションはPHPでプログラミングされています。

+2

を交換し、異なるフィールドの姓。 – Siyual

+0

多くのミドルネームを持つ人物、または異なる人物ですか? – jarlh

+0

はい、これらはテーブルの別々の列にする必要があります。しかし、LIKEまたはREGEXPを検索条件として使用できます。 –

答えて

2

一つの方法は、ワイルドカードを使用することです:

where name like concat('%', replace($userinput, ' ', '%'), '%') 

注:これはまだ名前が(あなたの例では、あなたが望むことを示唆しているものです)右の順であることが必要です。

+1

先頭と末尾の '% 'も必要ありませんか? – jarlh

+0

@ jarlh。 。 。はい、それは多くの意味があります。 –

1

は、あなたがこのようなクエリを使用することができますREGEXP 'Esteban Montoya|Esteban la Rosa Remirez|Ramirez'

1

を使用することができます。フィールド内の両方の単語を含むすべての行を返します。

SELECT * 
FROM yourTable 
WHERE `name` LIKE '%Esteban%' 
    AND `name` LIKE '%Montoya%'; 
1

http://sqlfiddle.com/#!9/ad364/1

はまだ右の順に表示される検索用語が必要ですが、最初に%を追加動作しているようですが、最後と最初に格納することにより、すべてのスペース:)

SELECT * FROM people WHERE name LIKE '%Esteban%Ricardo%'; 
関連する問題