私は、検索テキストボックスから入力したすべてのキーワードをチェックし、最も一致するキーワードを返します。 私はクエリとその正常に動作しました。問題は、返された行の0の値を持つすべてのKW_MATCHEDを除外したいということです。WHERE句のMySql再利用エイリアス
SELECT
A1.*, (
SELECT
sum(
CASE
WHEN (A1.ID = A2.tag_id)
AND (
A2.keyword = 'keyword1' || A2.keyword = 'keyword2'
) THEN
1
ELSE
0
END
)
FROM
tbl_article_tags A2
) AS KW_MATCHED
FROM
tbl_article A1
ORDER BY
KW_MATCHED DESC
結果:
+----+---------------+----------------+------------+
| ID | Title | Content | KW_MATCHED |
+----+---------------+----------------+------------+
| 1 | title | Lorem Ipsum... | 7 |
+----+---------------+----------------+------------+
| 2 | another title | Lorem Ipsum... | 5 |
+----+---------------+----------------+------------+
| 3 | another title | Lorem Ipsum... | 0 |
+----+---------------+----------------+------------+
| 4 | another title | Lorem Ipsum... | 0 |
+----+---------------+----------------+------------+
私は、WHERE句(以下の私のクエリを参照)のために再使用してエイリアスKW_MATCHEDを試してみましたが、それは、このメッセージが返されます。
[のErr] 1054 - 'where句'の 'KW_MATCHED'列が不明です
SELECT
A1.*, (
SELECT
sum(
CASE
WHEN (A1.ID = A2.tag_id)
AND (
A2.keyword = 'keyword1' || A2.keyword = 'keyword2'
) THEN
1
ELSE
0
END
)
FROM
tbl_article_tags A2
) AS KW_MATCHED
FROM
tbl_article A1
WHERE
KW_MATCHED > 0
ORDER BY
KW_MATCHED DESC
これを行う方法はありますか?私の悪い英語のための先進的で申し訳ありませんに感謝:)
よりHAVING使用してみてください「それがエラーを返します」言わないでください:問題のエラーメッセージをコピーします。 –
質問が編集されました –