【问题标题】:How Can I Achieve This in Using MySQL?如何在使用 MySQL 时实现这一目标?
【发布时间】:2014-12-20 06:11:54
【问题描述】:

我有一个要求是

我有一个包含合作伙伴和事件详细信息的表格,每个合作伙伴都有事件数量。现在我需要根据 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;

【问题讨论】:

  • 显示你的表结构。列名和至少一两个样本行数据。
  • 这里我添加了我的表结构,这里我只有一个表中的总数据,需要按照我的要求对行进行排序。

标签: mysql function stored-procedures cursor


【解决方案1】:

我对你的要求不是很清楚。还是试试吧。

在您掌握了 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            |
|    _________  | _________, _________                       |
|    _________  | _________                                  |
|    _________  | _________, _________ _________, _________  |
|    _________  | _________, _________,                       |
+---------------+--------------------------------------------+

【讨论】:

  • 感谢您的快速回复,我想显示事件,例如,如果有 5 个合作伙伴,每个合作伙伴每个有 2 或 3 个事件,现在我想为所有合作伙伴显示第一个事件,然后是第二个对于所有这样的人......
  • @kondapaka:这就是我从您的要求中了解到的全部内容。
【解决方案2】:

我认为 INNER JOIN 应该可以工作。类似:

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

【讨论】:

  • 为什么需要“INNER JOIN”来满足这个简单的要求?
  • 不需要使用innerhjoin,我只有事件表中的所有数据
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多