Php MySQL连接表作为嵌套数组

Php MySQL连接表作为嵌套数组,php,mysql,sql,join,Php,Mysql,Sql,Join,假设我们有以下两个表: 预订表格:id、时间、用户id 用户表:id,name 选择预订时,如何在纯MySQL上获得以下输出,而无需在php上为每个预订手动查询“用户”? 因为当它在成千上万的预订中循环时,速度会变得非常慢 { id: 1, time: "123456789", user_id: 321, user: { id: 321, name: John Doe } } 我看不出嵌套结构有什么好处。只需返回所需的列

假设我们有以下两个表:

预订
表格:
id、时间、用户id

用户
表:
id,name

选择预订时,如何在纯MySQL上获得以下输出,而无需在php上为每个预订手动查询“用户”?

因为当它在成千上万的预订中循环时,速度会变得非常慢

{
 id: 1,
 time: "123456789",
 user_id: 321,
 user: {
        id: 321,
        name: John Doe
       }
}

我看不出嵌套结构有什么好处。只需返回所需的列:

select r.*, u.name as user_name
from reservation r join
     user u
     on r.user_id = u.id

使用
连接

-- could be wrapped with JSON_ARRAYAGG if needed
SELECT JSON_OBJECT('id', r.id,
                   'time', r.time,
                   'user_id', r.user_id,
                   'user', JSON_OBJECT('id', u.id, 'name', u.name)
       ) AS result
FROM reservations r
JOIN users u
  ON r.user_id = u.id

您可以通过连接获得所需的数据

SELECT reservations.id, reservations.time, reservations.user_id, users.name FROM reservations LEFT JOIN users ON users.id = reservations.user_id

简单连接就足够了这是基本连接。这将提供相同级别的数据,而不是作为嵌套数组。谢谢,有没有一种方法可以获得类似的结果,同时避免键入每个列名,而只使用星号(*)?像
选择预订。*,用户。*…
@John很高兴我能帮上忙。至于
SELECT*
我不知道MySQLOK有这样的功能,我只是做了一个PHP函数,它循环使用
“descripe$tableName”
获取的表的所有列名,并返回一个字符串来填充JSON_OBJECT()参数。帮助我避免在那里输入50个列名:)谢谢!如果两个表都有一个“id”列,那么将被覆盖,除非我使用“as”关键字指定不同的名称。如果栏目太多,这将成为一种负担。这就是为什么我希望保留列的默认名称,并在另一个数组中保持用户列的独立性,最好在选择时使用(*)符号。@John。由于
JOIN
条件的原因,
id
列是相同的。退回两次是多余的。