我的数据库中有2个表,一个用于sublets
,另一个用于users
。
关系是每个user
可以有多个转租
sublets
表中的外键是user_id。
TABLE users {
id,
name
},
TABLE sublets {
sublet_id,
city_id,
user_id,
rooms,
floor,
price
}
现在让我们说id为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,...]...
所以现在我在这一列中有所有转租,你可以看到我可能想把它用作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
结合起来对我来说太麻烦了,因为如果我要添加一个新列对于转租表的列我将不得不在许多不同的地方编辑我的查询。
什么是最好的解决方案?使用编程语言进行2次查询并将转租连接到用户会更慢吗?
提前谢谢!
我希望我提供了足够的信息,并且我清楚地描述了我的需求。
答案 0 :(得分: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()
中添加更多列。