如何使用MySQL实现这一目标?

时间:2014-12-20 06:11:55

标签: mysql function stored-procedures cursor

我的要求是

我有一张包含合作伙伴和活动详情的表格,每个合作伙伴都有多个活动。现在我需要根据partnerid获取活动详情,意味着

 partner1->event1
 partner2->event1
 .......
 partnern->event1

 Partner1->event2
 partner2->event2
 ........
 partnern->event2

 ...
 .....
partner1->eventn
partner2->eventn
......

这里每个伙伴都有自己的事件数量。请给我建议,我使用的是mysql

这是我的表格结构

CREATE TABLE `event` (
  `eventid` varchar(30) NOT NULL DEFAULT '',
  `partnerid` varchar(30) DEFAULT NULL,
  PRIMARY KEY (`eventid`),
  KEY `partnerid` (`partnerid`),
  KEY `locationid` (`locationid`),
  CONSTRAINT `event_ibfk_1` FOREIGN KEY (`partnerid`) REFERENCES `partnerprofile` (`userid`),
  CONSTRAINT `event_ibfk_2` FOREIGN KEY (`locationid`) REFERENCES `location` (`locatinid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

2 个答案:

答案 0 :(得分:0)

我对你的要求不太清楚。无论如何试一试。

掌握了MySQL的基础知识后,请执行下一步并采用聚合函数。 Group BY适用于检索有关一组数据的信息。如果您只有一种类型的产品,那么GROUP BY就不会那么有用了。

GROUP BY只有在你有许多类似的东西时才会闪耀。例如,如果您有多个相同类型的合作伙伴,并且想要查找一些统计信息,例如最小,最大或其他顶级信息,则可以使用GROUP BY

以下是更新的解决方案:

SELECT A.`event_id` AS 'Event(ID)', B.`partner_names` AS 'Partners' FROM `event` A
JOIN
SELECT (SELECT GROUP_CONCAT( P.`partner_name`) AS 'partner_names'
               FROM (SELECT `partner_name` FROM information_schema.columns
               WHERE table_name='partnerprofile') as P) FROM `partnerprofile` B
GROUP BY A.`partnerid`

此处假设partner_namepartnerprofile表中的名称字段。

预期的输出是:

+---------------+--------------------------------------------+
|   Event(ID)   | Partners                                   |
+---------------+--------------------------------------------+
|    event_001  | Partener1, Partener2, Partener4            |
|    event_002  | Partener2, Partener3, Partener9            |
|    event_003  | Partener15                                 |
|    event_004  | Partener5, Partener7, Partener9            |
|    _________  | _________, _________                       |
|    _________  | _________                                  |
|    _________  | _________, _________ _________, _________  |
|    _________  | _________, _________,                       |
+---------------+--------------------------------------------+

答案 1 :(得分:-1)

我认为INNER JOIN应该有效。类似的东西:

  

SELECT * FROM event INNER JOIN partner ON event.partnerID = partner.partnerID