我正在分析一些查询,并在尝试从基于user_id
. 考虑下表:
+------------------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+------------------+------+-----+---------+----------------+
| subscription_id | int(11) unsigned | NO | PRI | NULL | auto_increment |
| user_id | int(11) unsigned | YES | MUL | NULL | |
| expires | int(11) unsigned | YES | MUL | NULL | |
| created | int(11) unsigned | YES | MUL | NULL | |
| modified | int(11) | YES | | NULL | |
+------------------------+------------------+------+-----+---------+----------------+
获取用户时,我想要GROUP_CONCAT
所有用户的订阅。目前此方法适用于一个领域:
SELECT u.id,
(
SELECT GROUP_CONCAT(s.subscription_id)
FROM subscriptions s
WHERE s.user_id = u.id
) AS subscription_ids
FROM users u
LIMIT 10
我可以添加所有具有不同SELECT GROUP_CONCAT
s 的字段。但是,由于 MySQL为每个字段加入表,因此对于任何实际行数,此方法都非常慢。列出用户时,subscriptions
有没有一种方法可以同时显示所有字段?GROUP_CONCAT
我试过一个LEFT JOIN
方法:
SELECT
u.id AS user_id,
GROUP_CONCAT(s.subscription_id) AS subscription_ids
FROM users u
LEFT JOIN subscriptions s
ON s.user_id = u.id
LIMIT 10
但是,这似乎连接了所有的订阅 ID。我有点难过为什么LEFT JOIN
会这样做。但令我惊讶的是,似乎没有一种简单的方法可以连接来自不同表的字段列表。