【问题标题】:Is it possible to concat full record(the whole row) into one column in MySQL? and how?是否可以将完整记录(整行)连接到 MySQL 中的一列?如何?
【发布时间】: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


    【解决方案1】:

    我不知道这是否是一个有效的解决方案,但您可以使用 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() 添加更多列。

    【讨论】:

    • 正要写几乎完全一样的东西+1
    • 这就是我说如果我在 sublets 表中添加一个新列我将不得不在很多地方编辑这个查询所以它不会比在一个函数中编写一个更好的方法编程语言而不是在 MySQL 中进行。我知道这个解决方案,但认为它效率不高,无论如何感谢您的建议!
    • 是的,这不是有效的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多