是否可以将完整记录(整行)连接到MySQL中的一列?如何?

时间:2016-10-04 13:13:44

标签: php mysql sql sql-server json

我的数据库中有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次查询并将转租连接到用户会更慢吗?

提前谢谢!

我希望我提供了足够的信息,并且我清楚地描述了我的需求。

1 个答案:

答案 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()中添加更多列。