いくつかの条件に従って、SQLクエリ結果セットの結果をランク付けしたいと思います。
FULL TEXT-AGAINSTペアは単一の列に使用できますが、すべての条件を満たすことはできません。何か方法があれば共有してください。
今、私はいくつかの提案された答えの後にこれを使用しています:
SELECT * FROM (SELECT *, DATE_FORMAT(date, '%d %b, %Y')AS dt,
case when title LIKE '%".$fkeyword."%' then 6 else 0 end +
case when description LIKE '%".$fkeyword."%' then 3 else 0 end +
case when Channel_Name LIKE '%".$fkeyword."%' then 1 else 0 end +
case when Industry_Name LIKE '%".$fkeyword."%' then 1 else 0 end +
case when Company_Name LIKE '%".$fkeyword."%' then 1 else 0 end as score FROM Search
WHERE title LIKE '%".$fkeyword."%' or
Channel_Name LIKE '%".$fkeyword."%' or
Company_Name LIKE '%".$fkeyword."%' or
description LIKE '%".$fkeyword."%' or
Industry_Name LIKE '%".$fkeyword."%') scored order by score desc
これは非常に大きなテーブルではうまく機能しませんが、出発点になります。
SELECT * FROM (
SELECT *, DATE_FORMAT(date, '%d %b, %Y') AS dt,
IF(title LIKE '%".$fkeyword."%', 1, 0) +
IF(Channel_Name LIKE '%".$fkeyword."%', 2, 0) +
IF(Company_Name LIKE '%".$fkeyword."%', 1, 0) +
IF(Industry_Name LIKE '%".$fkeyword."%', 1, 0) +
...
IF(Platform_Description LIKE '%".$fkeyword."%', 1, 0) as score
FROM Search
) scored_results
WHERE score > 0
ORDER BY score DESC
スコア> 0は、別のしきい値に置き換えることができます。
IF(条件、1、0)の1,0の数値は、負の場合でも、他のスコアに置き換えることができます。例:IF(Title like '%foo%'、10、-5)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加