繁体   English   中英

是否可以在MySQL中将完整记录(整行)合并为一列? 如何?

[英]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_CONCATCONCAT

像这样,

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM