0

OK、呼び出されたDBテーブルがplayersあり、各プレーヤーには名前と名前があります。次に、プレーヤーを検索するために呼び出すPHPAjax検索機能があります。たとえば...入力ボックスに誰かが入力するJamesと、テーブルに前の名前Jamesと名前の行がSmith繰り返し表示されます。

私はこの$check = mysql_query("SELECT * FROMプレイヤーのWHERE名前をLIKE '%$name%' ORフォアネームにしますLIKE '%$name%' LIMIT 0, 10") or die(mysql_error());

likeそして、キーワードの名前または名前のいずれかで少なくとも10を返しますJames。ただし、James Smithテーブルにあるにもかかわらず、と入力すると、結果はゼロになります。

これを修正するにはどうすればよいですか?

4

3 に答える 3

2
SELECT * FROM players WHERE CONCAT(forename, ' ', surname) = '$name' OR forename LIKE '%$name%' OR surname LIKE '%$name%'
于 2013-01-13T23:11:54.237 に答える
1

InnoDBまたはMyISAMを使用していますか?MyISAMを使用している場合は、結合された名前を保持する単一のフィールドを作成し、フルテキストインデックスを使用して検索できます。したがって、combined_namesという新しいフィールドを追加して、次のように検索するとします。

SELECT * FROM table WHERE match(combined_names) against('John Smith');

これにより、JohnまたはSmithのいずれかが含まれる行が検索され、次のようにプラスを追加する両方の部分を持つ行のみに一致するように変更できます。

SELECT * FROM table WHERE match(combined_names) against('+John +Smith');

詳細については、MySQLサイトのドキュメントをご覧ください。

http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

于 2013-01-13T23:53:19.490 に答える
1

名前をスペースで分割して、クエリが 2 回実行されるようにします (スペースが 1 つある場合)。

クエリは両方の名前に対して実行されます

$nameBits = explode($name," ");

$nameBits の各部分に対してクエリを実行します

surname LIKE '%$nameBits[$i]%' 
于 2013-01-13T23:02:28.187 に答える