[英]Is it possible to concat full record(the whole row) into one column in MySQL? and how?
我的数据库中有2个表,一个表用于sublets
,一个表用于users
。
关系是每个user
可以有多个子租约。
在国外关键sublets
表是USER_ID。
TABLE users {
id,
name
},
TABLE sublets {
sublet_id,
city_id,
user_id,
rooms,
floor,
price
}
现在,假设ID为46的user
有3个子租约。
如果我JOIN
表:
SELECT * FROM users JOIN sublets ON users.id = sublets.user_id WHERE users.id = 46
我得到3行,每个子租区每行。
id | name | sublet_id | city_id | user_id | rooms | floor | price
=================================================================
46 | "Joe" | 1 | 20 | 46 | 2 | 2 | 30
46 | "Joe" | 2 | 13 | 46 | 3 | 5 | 20
46 | "Joe" | 3 | 2 | 46 | 1 | 1 | 10
我希望得到的结果是在名为user_sublets的一列下放置1行,并将所有子子集包含在内。
例如:
id | name | sublets
====================
46 | "Joe" | ["sublet_id":1,"city_id":20, "user_id":46,...],["sublet_id":2,...]...
所以现在我在这一列中拥有了所有子转储,您可以看到我可能想将其用作JSON
user: {
"id": 46,
"name": "Joe",
"sublets": [
{
"sublet_id":1,
"city_id":20,
...
},
{
"sublet_id":2,
"city_id":13,
...
},
{
"sublet_id":3,
"city_id":2,
...
}
]
}
因此,最终我想要获得此结果的主要原因是在我的应用程序中通过1次查询将其用作JSON,而不是需要两次查询DB并使用编程语言(例如PHP)添加子项。
据我所知, GROUP_CONCAT
只能合并一个列,所以我不能合并所有列,并且将它与concat
合并对我来说太混乱了,因为如果我要向sublet表中添加新列,则必须在其中编辑查询许多不同的地方。
最好的解决方案是什么? 进行2个查询并使用编程语言将子转储给用户会更慢吗?
先感谢您!
我希望我提供了足够的信息,并且我清楚地描述了我的需求。
我不知道这是否是一个有效的解决方案,但是您可以结合使用GROUP_CONCAT和CONCAT 。
像这样,
SELECT
user_id,name,
GROUP_CONCAT(CONCAT('[',
CONCAT("{'sublet_id':",sublet_id,",city_id:'",city_id,"'}"),']'))
FROM users
JOIN sublets
ON users.id = sublets.user_id
WHERE users.id = 46
您可以在第二个CONCAT()
添加更多列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.