【发布时间】:2016-10-04 13:13:43
【问题描述】:
我的数据库中有两张表,一张用于sublets,一张用于users。
关系是每个user 可以有多个sublets。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
我想要的结果是有 1 行,所有子集都在一个名为 user_sublets 的列下。
例如:
id | name | sublets
====================
46 | "Joe" | ["sublet_id":1,"city_id":20, "user_id":46,...],["sublet_id":2,...]...
所以现在我在这一列中拥有了所有的 sublets,你可以看到我可能想将它用作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,
...
}
]
}
所以最终我想要达到这个结果的主要原因是在我的应用程序中使用它作为 JSON 进行 1 次查询,而不是需要两次查询数据库并使用编程语言(即 PHP)添加子组件。
据我所知,GROUP_CONCAT 只能连接一列,因此我无法连接所有列,将它与 concat 结合起来对我来说太麻烦了,因为如果我要在 sublets 表中添加一个新列,我将不得不在许多不同的地方编辑我的查询。
最好的解决方案是什么?使用编程语言进行 2 次查询并将 sublets 连接到用户会更慢吗?
提前感谢您!
我希望我提供了足够的信息,并且我清楚地描述了我的需求。
【问题讨论】:
标签: php mysql sql sql-server json