列id(int)、name(varchar)、およびinfo(text)を持つテーブルInnoDBがあります。特定の用語を使用してテーブルの name 列と info 列を検索し、各レコードで結合された 2 つの列の「ヒット」数に従って、一致するレコードを上位から下位にランク付けする必要があります。
私はトロールしましたが、これまでMySQLでこのようなことをしたことがなく、少し混乱していることに気づきました...大文字と小文字の区別など.
誰でも簡単なヘルプを提供できますか?
これは私が持っている限りです:
SELECT count(*) as count
FROM artistmanager_artists WHERE
case when 'name' LIKE '%a%' then 1 else 0 end
+ case when 'info' LIKE '%a%' then 1 else 0 end
ORDER BY count ASC
(「a」は検索語です)
これは 1 行 1 列の 'count' を返し、値は 3 です...これは、mo のテーブルに 3 つのレコードがあるためだと思います。
私もこれを見つけて試しました:
SELECT *
FROM `artistmanager_artists`
WHERE `name` LIKE '%a%'
AND (
`info` LIKE '%a%'
)
ORDER BY (
(
CASE WHEN `name` LIKE '%a%'
THEN 1
ELSE 0
END
) + (
CASE WHEN `info` LIKE '%a%'
THEN 1
ELSE 0
END
)
) DESC
返されなかったレコードに多くの「a」が含まれていることがわかっている場合、これは明確な順序ではなく、1 つを除くすべてのレコードを返しました。