2015-10-26 2 views
0

Вот моя таблица и данные образца.Условие на основе выбора из group_concat в запросе Mysql

CREATE TABLE `articles` 
(
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `title` varchar(100) NOT NULL, 
    PRIMARY KEY (`id`) 
); 

CREATE TABLE `tags` 
(
    `id` int(11) NOT NULL, 
    `name` varchar(100) NOT NULL, 
    PRIMARY KEY (`id`) 
); 

CREATE TABLE `article_tags` 
(
    `article_id` int(11) NOT NULL, 
    `tag_id` int(11) NOT NULL 
); 

INSERT INTO `tags` (`id`, `name`) VALUES 
(1, 'Wap Stories'), 
(2, 'App Stories'); 

INSERT INTO `articles` (`id`, `title`) VALUES 
(1, 'USA'), 
(2, 'England'), 
(3, 'Germany'), 
(4, 'India'), 
(5, 'France'), 
(6, 'Dubai'), 
(7, 'Poland'), 
(8, 'Japan'), 
(9, 'China'), 
(10, 'Australia'); 

INSERT INTO `article_tags` (`article_id`, `tag_id`) VALUES 
(1, 1), 
(1, 2), 
(4, 1), 
(5, 1), 
(2, 2), 
(2, 1), 
(6, 2), 
(7, 2), 
(8, 1), 
(9, 1), 
(3, 2), 
(9, 2), 
(10, 2); 

Как я могу получить нижеследующий результат, который я попытался использовать с помощью функции group_concat. Он дает все результаты. Но мое требование: мне нужно, чтобы groupconcat считался

a. Комбинация 1,2 может быть там, только 1 может быть там, но 2 одного не может быть.

b. Сочетание 2,1 может быть там, только 2 может быть там, но один в одиночку не может быть там

Ниже я вывожу нужен

id, title, groupconcat 
-------------------------- 
1, USA,  1,2 
2, England, 1,2 
4, India, 1 
5, France, 1 
8, Japan, 1 
9, China, 1,2 

SqlFiddle Link

запрос, который я использую является

select id, title, group_concat(tag_id order by tag_id) as 'groupconcat' from articles a 
left join article_tags att on a.id = att.article_id 
where att.tag_id in (1,2) 
group by article_id order by id 
+0

У меня нет требований. Пожалуйста, объясните более подробно. – fancyPants

+0

Мне нужно получить теги идентификаторов стран, в которые помечены. Как и в приведенном выше выводе, вы можете увидеть США, Англия принадлежит тегам id 1 и 2, которые хранятся в таблице тегов. Поэтому в основном мне нужны все страны, которые помечены тегом id 1, если они помечены тегом id 1, тогда мне также нужно проверить, помечены ли теги id 2 – Sharath

ответ

0

Вы можете попробовать, как это

SELECT id, title, GROUP_CONCAT(tag_id ORDER BY tag_id) AS 'groupconcat' 
FROM articles a 
LEFT join article_tags att on a.id = att.article_id 
WHERE att.tag_id in (1,2) 
GROUP BY article_id 
HAVING SUBSTRING_INDEX(groupconcat,',',1) !='2' 
ORDER BY id 
+0

благодаря arun krish – Sharath