簡體   English   中英

在MySQL查詢中根據條件從group_concat中選擇

[英]Condition based selecting from group_concat in Mysql query

這是我的表格和示例數據。

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函數獲取以下輸出。 它給出了所有結果。 但我的要求是我需要將值歸類為

一個 1,2的組合可以在那里,只有1可以在那里,但2單獨不能在那里。

b 2,1的組合可以在那里,只有2可以在那里,但1單獨不能在那里

以下是我需要的輸出

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鏈接

我正在使用的查詢是

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

你可以這樣嘗試

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM