この投稿で説明されているように、mysql で単純な検索を実装しています。
私のコードは、与えられた例に非常に似ています:
SELECT
SUM(((LENGTH(p.body) - LENGTH(REPLACE(p.body, 'term', '')))/4) +
((LENGTH(p.body) - LENGTH(REPLACE(p.body, 'search', '')))/6))
AS Occurrences
FROM
posts AS p
GROUP BY
p.id
ORDER BY
Occurrences DESC
これはうまく機能します。問題は、出現回数が 0 より大きい行 (つまり、検索との関連性を示す行) のみを選択したいということです。
追加してみました
WHERE Occurrences>0
コードブロック全体を作成します:
SELECT
SUM(((LENGTH(p.body) - LENGTH(REPLACE(p.body, 'term', '')))/4) +
((LENGTH(p.body) - LENGTH(REPLACE(p.body, 'search', '')))/6))
AS Occurrences
FROM
posts AS p
WHERE Occurrences>0
GROUP BY
p.id
ORDER BY
Occurrences DESC
ただし、これは常にクエリ エラーになります。テストのために他の WHERE 句を試してみましたが、Occurrences 変数を使用しようとしたときにのみエラーが発生することがわかりました。
ご想像のとおり、エラーは次のとおりです。
Unknown column 'Occurrences' in 'where clause'
私がやろうとしていることをする方法はありませんか?すべての行を選択する必要はなく、php で不要な行を切り取る必要はありません。これは非常に非効率的です。