2016-10-05 16 views
2

誰かが私のSQLクエリを改善するのを助けることができますか?サイト検索用です。クエリは以下のとおりです。検索のための私のSQLクエリを改善する

SELECT j_author.author_id as authorID, author_name, author_description, author_cat, author_city, author_state, points, (SELECT SUM(rate_value) FROM j_rating WHERE j_rating.author_id = authorID) AS rating_value 
    FROM j_author 
    JOIN j_author_category ON j_author.author_cat = j_author_category.author_cat_id 
    WHERE author_name LIKE '%" . $keyword . "%' 
    OR author_city LIKE '%" . $keyword . "%' 
    ORDER BY rating_value DESC 

これは機能しますが、正確には私が望むものではありません。たとえば、私が「edu」を検索し、「educate」という名前の著者または都市がある場合、それは著者または都市を返します。 「教育された人々」が検索された場合、結果は返されません。

私も使ってみました:

SELECT j_author.author_id as authorID, author_name, author_description, author_cat, author_city, author_state, points, (SELECT SUM(rate_value) FROM j_rating WHERE j_rating.author_id = authorID) AS rating_value,    
MATCH(j_author.author_name, j_author.author_city) AGAINST ('$keyword' IN BOOLEAN MODE) AS score 
FROM j_author 
JOIN j_author_category ON j_author.author_cat = j_author_category.author_cat_id 
WHERE MATCH(j_author.author_name, j_author.author_city) AGAINST ('$keyword' IN BOOLEAN MODE) 
ORDER BY `score` DESC 

をしかし、私はこの方法を使用するたびに、私は「EDU」を検索するとき、それがどんな結果を返しません。

「教育された人」が入力された検索キーワードの場合、「教育」と「人」の両方を別のキーワードとして検索し、いずれかのキーワードに一致する結果を返す必要があります。また、 'edu'がキーワードの場合、eduを持つすべての著者を名前または都市に返します。

+0

全文検索で「部分文字列」の一致が検索されません。単語の一部ではなく単語を探します。部分一致を検索するには、 'edu * 'を検索する必要があります –

答えて

0

クエリに値を渡す前にテキストを分割することはできません。あなたが探しているもの:

Transact-SQL: How do I tokenize a string?

を使用すると、事前に決めた文字でクエリをばらばらにし、各「トークン」でクエリを実行する場合は、あなたの目標を達成することができます。

+0

ありがとうございました。それを試してみる –

+0

これは最終的にあなたのために働きましたか? – Miek

関連する問題