0

3 つのテキストフィールドと 1 つの ID フィールドを含むテーブルがあります。

このテーブルは、ユーザー検索の関連性に基づいて投稿の ID のコレクションを取得するためだけに存在します。

問題は、望ましい結果を得るために SQL 連続体をワープするのに必要なアインシュタインの知性が私に欠けていることです -

SELECT `id` FROM `wp_ss_images` WHERE `keywords` LIKE '%cute%' OR `title` LIKE '%cute%' OR `content` LIKE '%cute%'
  • これは、関連性の低いものから関連性の低いものへのリストを取得するのに本当に十分ですか、それとももっと良い方法がありますか?

もちろん、データベースは最大 20,000 行になる可能性があるため、効率を維持したいと考えています。


これが更新です-私は全文ルートに行きました-

例:

SELECT `id` FROM `wp_ss_images` WHERE MATCH (`keywords`,`title`,`content`) AGAINST ('+cute +dog' IN BOOLEAN MODE);

ただし、いずれかの単語ですべてのエントリを取得しているようです。これを絞り込んで出現回数ごとの関連性を示すにはどうすればよいですか?

4

2 に答える 2

1

各フィールドでのキーワードの出現回数の関連性に基づいて結果のリストを取得するには (つまり、cute は最初に 3 つのフィールドすべてに表示され、次に 2 つのフィールドに表示されるなど)、次のようにすることができます。

SELECT id
FROM (
  SELECT id, 
    (keywords LIKE '%cute%') + (title LIKE '%cute%') + (content LIKE '%cute%') total 
  FROM wp_ss_images
  ) t
WHERE total > 0
ORDER BY total DESC
于 2013-07-14T00:49:58.393 に答える
0

個別に検索するよりも優れたフィールドを連結できます

SELECT `id` FROM `wp_ss_images` WHERE CONCAT(`keywords`,`title`,`content`) LIKE '%cute%'

ただし、これは質問の「最大から最小」の部分には役立ちません。

于 2013-07-14T00:44:25.300 に答える