2012-03-17 70 views
2

我想搜索多个变量,在WHERE条件下或在HAVING条件下,在group_concat表中可能为true。事情是这样的:如何在WHERE条件或HAVING条件下搜索可返回true的值?

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 

找到我寻找,但我必须做第二次查询,显示结果我想要的。

对不起,如果问题重复,我不知道该怎么去问,所以我不知道如何去搜索它。对不起我的英文!

回答

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 2012-03-17 21:05:23

+0

只需要在MAX之间加上逗号 – Leo 2012-03-17 21:17:08

+0

感谢您的纠正,编辑我的答案 – 2012-03-17 22:39:12