2016-11-29 8 views
0

私は、検索テキストボックスから入力したすべてのキーワードをチェックし、最も一致するキーワードを返します。 私はクエリとその正常に動作しました。問題は、返された行の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 

これを行う方法はありますか?私の悪い英語のための先進的で申し訳ありませんに感謝:)

+0

よりHAVING使用してみてください「それがエラーを返します」言わないでください:問題のエラーメッセージをコピーします。 –

+1

質問が編集されました –

答えて

0

ではなく、WHERE

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 
HAVING KW_MATCHED > 0 
ORDER BY KW_MATCHED DESC 
+0

それだけですか?ワオ。そんなにマスターしてくれてありがとう! –

+0

WHERE&HAVINGの動作に若干の違いがありますが、サブクエリ列のエイリアスが問題になるとは思われません。参照してください:http://stackoverflow.com/questions/2905292/where-vs-having/18710763#18710763 – PaulF

+0

はい今私は違いを得ることができます。それでは、それを試してみてください。 –