2012-03-17 5 views
2

Я хочу найти несколько варов, которые могут быть истинными в условии WHERE или в состоянии HAVING в таблице group_concat. Что-то вроде этого:Как найти значение, которое может возвращать true в условии 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 

Найди то, что я ищу, но я должен сделать второй запрос, чтобы показать результаты, как я хочу.

Извините, если вопрос повторяется, я не знал, как его спросить, поэтому я не знал, как его искать. Извините, мой английский тоже!

ответ

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

Спасибо за исправление, отредактировал мой ответ –