MySQL组_concat以给定的数字生成结果

MySQL组_concat以给定的数字生成结果,mysql,Mysql,我想知道,如果一个组的结果中有任何数字在给定的一组数字中 此示例数据可用于尝试: CREATE TABLE `events` ( `eventid` int(11) NOT NULL AUTO_INCREMENT, `eventname` varchar(255) DEFAULT NULL, PRIMARY KEY (`eventid`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1; -- ------------

我想知道,如果一个组的结果中有任何数字在给定的一组数字中

此示例数据可用于尝试:

CREATE TABLE `events` (
  `eventid` int(11) NOT NULL AUTO_INCREMENT,
  `eventname` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`eventid`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;

-- ----------------------------
--  Records of `events`
-- ----------------------------
BEGIN;
INSERT INTO `events` VALUES ('1', 'my event');
COMMIT;

-- ----------------------------
--  Table structure for `events2groups`
-- ----------------------------
CREATE TABLE `events2groups` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `eventid` int(11) DEFAULT NULL,
  `groupid` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;

-- ----------------------------
--  Records of `events2groups`
-- ----------------------------
BEGIN;
INSERT INTO `events2groups` VALUES ('1', '1', '5'), ('2', '1', '3'), ('3', '1', '1');
COMMIT;

-- ----------------------------
--  Table structure for `groups`
-- ----------------------------
CREATE TABLE `groups` (
  `groupid` int(11) NOT NULL AUTO_INCREMENT,
  `groupname` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`groupid`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;

-- ----------------------------
--  Records of `groups`
-- ----------------------------
BEGIN;
INSERT INTO `groups` VALUES ('1', 'group1'), ('2', 'group2'), ('3', 'group3'), ('4', 'group4'), ('5', 'group5');
COMMIT;

SET FOREIGN_KEY_CHECKS = 1;
然后触发此查询:

SELECT GROUP_CONCAT(groups.groupid), 
IF ( GROUP_CONCAT(groups.groupid) IN (1,2,3), 'yes', 'no' ) as isInGroup 
FROM `events`
LEFT JOIN events2groups ON events.eventid = events2groups.eventid
LEFT JOIN groups ON events2groups.groupid = groups.groupid
GROUP BY events.eventid
第一个结果列显示,事件包含组5、3和1。
用户拥有组1、2和3,因此3和1匹配。我如何通过查询从IF中获取“是”?

为什么要使用
组\u concat()
结果?只需使用条件聚合:

SELECT GROUP_CONCAT(groups.groupid), 
       (case when max(groups.group_id in (1, 2, 3)) > 0 then 'yes' else 'no'
        end) as isInGroup 
FROM `events` LEFT JOIN
      events2groups
      ON events.eventid = events2groups.eventid LEFT JOIN
      groups
      ON events2groups.groupid = groups.groupid
GROUP BY events.eventid;
结果
不,是的,是的,

如果你喜欢,考虑下面这个简单的两步过程:1。如果您还没有这样做,请提供适当的DDL(和/或SQLFIDLE),以便我们可以更轻松地复制问题。2.如果尚未这样做,请提供与步骤1中提供的信息相对应的所需结果集。这种方法可能会对您有所帮助。
SELECT GROUP_CONCAT(groups.groupid), 
  GROUP_CONCAT(case when groups.groupid IN (1,2,3) then  'yes' else 'no' end) as isInGroup 
FROM `events`
LEFT JOIN events2groups ON events.eventid = events2groups.eventid
LEFT JOIN groups ON events2groups.groupid = groups.groupid
GROUP BY events.eventid
;