2012-02-29 5 views
0

mysqlでMATCHを使って検索したいです。mysql検索の 's'の終わりは、 's'の終わりなしで同じものを返さなければなりません。

私は1つのテーブルに "名前"と "カテゴリ"フィールドが含まれています。 「カテゴリ」フィールドには本、書籍、書籍が含まれます。

私が欲しいのは、カテゴリフィールドで「書籍」や「書籍」を検索すると、3行が表示されます。

誰でも私にこれを助けることができますか?

おかげ

私は実際に私は検索フィールドを持っているウェブサイトを持って、この質問を明確にする必要があります。ユーザーが何かを入力すると、私のウェブはカテゴリフィールドで検索する必要があります。実際の問題は、時々ユーザー入力 "本"、時には "本"、時には "車"、時には "車"です。単語の後のこれらの "s"の単語は私に頭痛をさせる、私は本当に欲しいと知っているすべての "s"の文字を削除する必要がありますので、私は何をすべきですか、本や車に関連するすべてを見つけることです?それとももっと良い解決策がありますか?

アリ

+0

MySQLはそのようには機能をサポートしていない、私はそれが優れていると思いますカテゴリを別々のテーブルに保存する場合、1:NまたはN:Mの関係を構築する – user1027167

答えて

0
select * 
from table 
where category LIKE '%book%' 
+0

thx oddant :)私は間違った質問をすると思います。私はこの質問を明確にする必要があります、実際に私は検索フィールドを持っているウェブサイトがあります。ユーザーが何かを入力すると、私のウェブはカテゴリフィールドで検索する必要があります。実際の問題は、ユーザー入力「本」、時には「本」、時には「車」、時には「車」などです。単語の後のこれらの "s"の単語は私に頭痛をさせる、私は本当に欲しいと知っているすべての "s"の文字を削除する必要がありますので、私は何をすべきですか、本や車に関連するすべてを見つけることです?それとももっと良い解決策がありますか? – ari

+0

@実際には、リクエストは '表の表からすべての列を選択します。 '単語の前後に何があるかに関係なく' book 'という単語がカテゴリフィールドにあります。したがって' s'が省略された場合、 's'と書かれた – user544262772

+0

本当にこれをチェックする必要があります。 – ari

0

許容長さにユーザーの入力をトリミングして、PHPからクエリを実行している場合

$userInput = substr($input, 0, 4); 

    select * from table where category like "%$userInput%" 
+0

thx Naveen :)私は間違った質問をすると思います。私はこの質問を明確にする必要があります、実際に私は検索フィールドを持っているウェブサイトがあります。ユーザーが何かを入力すると、私のウェブはカテゴリフィールドで検索する必要があります。実際の問題は、時々ユーザー入力 "本"、時には "本"、時には "車"、時には "車"などです。これらの "s"という言葉が私の頭痛を引き起こします。すべてが本や車に関係しているので、私は何をすべきですか?私はすべての "s"手紙を取り除くべきですか?それとももっと良い解決策がありますか? – ari

+0

ユーザーストリングを許容長に調整し、そのストリングに基づいて照会します –

+0

thx naveen。私はこれを行うより一般的な方法があると思った。私はそれが自動的に知っている機能を期待するだろう、ユーザーの検索本、それはまた、映画、映画、車、自動車などのような他の言葉で、本を返すだろう – ari

0

このクエリを試すには、例えば、あなたがそこにクエリを準備する可能性があり、

<?php 

$term = 'book'; 

if(substr($term,-1) == 's') { //if term ends in an s 
    $term = substr($term,0,-1); //the word without the s 
} 

//TODO: escape $term to prevent SQL injection 

$query = " 
    SELECT * FROM table 
    WHERE category REGEXP '{$term}s?' // s? matches zero or one 's' character 
"; 
+0

奇妙な:)私は間違った質問を入れますね。私はこの質問を明確にする必要があります、実際に私は検索フィールドを持っているウェブサイトがあります。ユーザーが何かを入力すると、私のウェブはカテゴリフィールドで検索する必要があります。実際の問題は、時々ユーザー入力 "本"、時には "本"、時には "車"、時には "車"など、または人々は車の保険や自動車保険のような2つの単語を入力します。単語の後のこれらの "s"の単語は私に頭痛をさせる、私は本当に欲しいと知っているすべての "s"の文字を削除する必要がありますので、私は何をすべきですか、本や車に関連するすべてを見つけることです?それとももっと良い解決策がありますか? – ari

0

MATCH()で検索するには、フルテキストインデックスが必要です過度の列カテゴリになる可能性があります。あなたが本当にちょうどそれらの2例をしたい場合は

、あなたはまた、「probookcover」または何のような結果を得る可能性がありますOddantの答えで

select * from table where 
category = 'book' or category = 'books' 

を書くことができます。

大文字と小文字を区別しないようにするには、複数のオプションがあります。

select * from table where 
lower(category) = 'book' or lower(category) = 'books' 

または

select * from table where 
category like 'book' or category like 'books' 

代わりに、あなたはまた、あなたの本で始まるすべての列を取得しますが、あなたはまた、 'ブックカバー' を得る可能性があります

select * from table where 
category like 'book%' 

を行うことができます。

編集:ので、私はこのようにそれを行うだろう、私が言ったように

が、試合は()やり過ぎである:あなたのコメントを考慮し

select * from table where 
category = whatYourUserEnters OR category = substring(whatYourUserEnters, 1, length(whatYourUserEnters) - 1) 
+0

thx tombom :)私は間違った質問をすると思います。私はこの質問を明確にする必要があります、実際に私は検索フィールドを持っているウェブサイトがあります。ユーザーが何かを入力すると、私のウェブはカテゴリフィールドで検索する必要があります。実際の問題は、時々ユーザー入力 "本"、時には "本"、時には "車"、時には "車"などです。これらの "s"という言葉が私の頭痛を引き起こします。すべてが本や車に関係しているので、私は何をすべきですか?私はすべての "s"手紙を取り除くべきですか?それとももっと良い解決策がありますか? – ari

+0

@ari私の答えを編集しました。役に立つと思ってもかまいません:) – fancyPants

関連する問題