0

この投稿で説明されているように、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 で不要な行を切り取る必要はありません。これは非常に非効率的です。

4

2 に答える 2