从正确的表结果获取多维数组

moiiocjp  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(310)

我有两张table。第一个是客户信息,第二个是电话号码。所以在第一张表中我会:

ID   Name
1    John
2    jill

在第二张表中,我会:

ID    phone     ext   notes                  customerID
1     687-5309  20    Primary                1   
2     687-5310  55    John's cell phone      1
3     687-5311  18    Note! Emergency Only!  1
4     235-1189                               2 
5     235-2324  24     title:owner           2

当我查询它时,我希望它从正确的表中给我一个多维结果。所以结果是:

[ID]=>1
[Name]=>John
[phoneList]=>[ 
     [
          [ID]=>1 , [phone]=>687-5309 , [ext]=>20 , [notes]=>Primary ],
          [ID]=>2 , [phone]=>687-5310] , [ext]=>55 , [notes]=>John's cell phone ], 
          [ID]=>3 , [phone]=>687-5311] , [ext]=>18 , [notes]=>Note! Emergency Only! ],
     ]

]

到目前为止,我只能做到:

SELECT * 
FROM customer_info
LEFT JOIN (
 SELECT * 
 FROM phone_numbers
) WHERE ID=1

我甚至不确定这是否可能。但感觉应该是这样。

0yycz8jy

0yycz8jy1#

如果不对客户信息进行分组,它将只是一个简单的左连接。

SELECT cust.*, phone.ID AS phone_id, phone.phone, phone.ext, phone.notes
FROM customer_info AS cust
LEFT JOIN phone_numbers AS phone ON phone.customerID = cust.ID
WHERE cust.ID = 1;

但是如果你想要每个客户信息id有一个记录?
那你也可以 GROUP BY 客户信息,然后使用组concat获取一个包含电话id和电话号码的字符串。

SELECT cust.ID, cust.Name, 
 group_concat(concat(phone.ID,':',concat_ws(',', phone.phone, ifnull(phone.ext,''), phone.notes)) separator ';') AS phoneList
FROM customer_info AS cust
LEFT JOIN phone_numbers AS phone ON phone.customerID = cust.ID
WHERE cust.ID = 1
GROUP BY cust.ID, cust.Name;

如果json_对象(mariadb,mysql)函数在您的版本中可用,那么您可以使用它。

SELECT cust.ID, cust.Name, 
group_concat(JSON_OBJECT('id', phone.ID, 'phone', phone.phone, 'ext', phone.ext, 'notes', phone.notes)) AS phoneList
FROM customer_info AS cust
LEFT JOIN phone_numbers AS phone ON phone.customerID = cust.ID
WHERE cust.ID = 1
GROUP BY cust.ID, cust.Name;

在db上测试<fiddle here

相关问题