2012-03-17 12 views
2

group_concatテーブルでWHERE条件またはHAVING条件に該当する複数の変数を検索したいと考えています。このような何か:WHERE条件またはHAVING条件で真を返す値を検索する方法は?

SELECT 
    article.id, 
    article.name, 
    GROUP_CONCAT(tags.name order by tags.name) AS nameTags, 
    GROUP_CONCAT(tags.id order by tags.id) AS idTags 
FROM 
    article 
    LEFT JOIN .... 
    LEFT JOIN .... 
WHERE article.name LIKE '%var1%' OR HAVING nameTags LIKE '%var1%' AND 
WHERE article.name LIKE '%var2%' OR HAVING nameTags LIKE '%var2%' 
GROUP BY id 

は、可能ないくつかの方法があるか、それが2つのquerysを行うには良いですか?

このクエリ:

SELECT 
    article.id, 
    article.name, 
    GROUP_CONCAT(tags.name order by tags.name) AS nameTags, 
    GROUP_CONCAT(tags.id order by tags.id) AS idTags 
FROM 
    article 
    LEFT JOIN .... 
    LEFT JOIN .... 
WHERE 
(article.name LIKE '%var1%' OR tags.name LIKE '%var1%') AND 
(article.name LIKE '%var2%' OR tags.name LIKE '%var2%') 
GROUP BY id 

は、私が検索するものを見つけるが、私は私が望むような結果を表示するために2番目のクエリを行う必要があります。

申し訳ありません質問を繰り返すと、私はそれを尋ねる方法を知らなかったので、それを検索する方法はわかりませんでした。申し訳ありません私の英語も!

答えて

0
SELECT 
    article.id, 
    article.name, 
    GROUP_CONCAT(tags.name order by tags.name) AS nameTags, 
    GROUP_CONCAT(tags.id order by tags.id) AS idTags, 
    MAX(IF(article.name LIKE '%var1%',1,0)) AS var1match, 
    MAX(IF(article.name LIKE '%var2%',1,0)) AS var2match 
FROM 
    article 
    LEFT JOIN .... 
    LEFT JOIN .... 
GROUP BY id 
HAVING 
    (nameTags LIKE '%var1%' OR var1match=1) 
    OR (nameTags LIKE '%var2%' OR var2match=1) 
+0

完全に機能します。この機能を知らなかった!私はそれをよく理解するために勉強します! 私はまだあなたにポイントを与えることはできません、申し訳ありません、そしてありがとう! – Leo

+0

ちょうどMAXのitens – Leo

+0

の間にコンマを追加しなければならなかった訂正のおかげで、私の答えを編集 –