【发布时间】:2016-11-25 11:04:19
【问题描述】:
假设我有以下架构:
艺术家:
+------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment | |
| name | varchar(255) | YES | UNI | NULL | |
+------------+------------------+------+-----+---------+----------------+
事件:
+------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| date | timestamp | YES | | NULL | |
| artist_id | int(11) | YES | | NULL | |
| venue_id | int(11) | YES | | NULL | |
+------------+------------------+------+-----+---------+----------------+
资产:
+---------------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | a
| event_id | int(11) | YES | | NULL |
| source_asset_title | varchar(255) | YES | | NULL | |
| source_created_time | timestamp | YES | | NULL | |
而且我想要给定艺术家 ID 的每个事件的 4 个资产的结果集,按事件日期排序,例如:
+----------+----------+------------------------------------------------------------------------------------------------------------------------+---------------------+---------------------+
| event_id | asset_id | source_asset_title | event_date | date |
+----------+----------+------------------------------------------------------------------------------------------------------------------------+---------------------+---------------------+
| 1 | 2089 | aba | 2015-12-03 07:00:00 | 2015-12-03 07:00:00 |
| 1 | 2101 | abb | 2015-12-03 07:00:00 | 2011-04-07 15:30:00 |
| 1 | 2102 | abc | 2015-12-03 07:00:00 | 2011-05-22 16:00:00 |
| 1 | 2107 | abd | 2015-12-03 07:00:00 | 2011-06-11 15:00:00 |
| 2 | 2109 | abe | 2011-07-18 15:00:00 | 2011-07-18 15:00:00 |
| 2 | 2113 | abf | 2011-07-18 15:00:00 | 2011-07-24 15:30:00 |
| 2 | 2115 | abg | 2011-07-18 15:00:00 | 2011-08-25 16:00:00 |
| 2 | 2123 | abh | 2011-07-18 15:00:00 | 2011-08-28 16:00:00 |
| 3 | 2126 | abi | 2011-09-01 16:00:00 | 2011-09-01 16:00:00 |
| 3 | 2129 | abj | 2011-09-01 16:00:00 | 2011-09-10 16:00:00 |
| 3 | 2135 | abk | 2011-09-01 16:00:00 | 2011-10-14 16:00:00 |
| 3 | 2147 | abl | 2011-09-01 16:00:00 | 2011-10-22 16:00:00 |
如果每个事件没有一个子查询,我怎么能做到这一点?
我相信这里的架构和结果集与 StackExchange 上的其他问题有很大不同,因此适合提出新问题。
【问题讨论】:
-
你能提供一个转储或 sqlfiddle,所以我们有一些数据可以玩吗?
-
你可以使用 GROUP_CONCAT 和 stackoverflow.com/a/23608554/308851
-
@chx 谢谢!我相信 GROUP_CONCAT 会将资产表的所有值作为字符串放入单个结果行中,这与我希望获得的输出不匹配。 (最终目标是返回描述资产的 json)。
-
似乎一种潜在的替代方法是使用 GROUP_CONCAT 和 CONCAT 明确地组装一个 JSON 对象,其中包含资产表中的每个字段作为结果集的一部分,类似于@chx 的建议:@ 987654322@
-
当然,那么您将面临需要增加 GROUP_CONCAT 长度限制的风险:stackoverflow.com/questions/2567000/…。