programing

오른쪽 테이블 결과에서 다차원 배열 가져오기

i4 2023. 8. 24. 21:48
반응형

오른쪽 테이블 결과에서 다차원 배열 가져오기

테이블이 두 개 있습니다.첫 번째는 고객 정보이고 두 번째는 전화번호입니다.그래서 첫 번째 표에서 저는 다음과 같습니다.

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

이게 가능한지조차 잘 모르겠어요.하지만 그래야 할 것 같아요.

customer_info를 그룹화하지 않으면 단순한 LEFT JOIN이 됩니다.

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;

하지만 customer_info ID당 하나의 레코드를 원한다면요?
그러면 당신도 할 수 있습니다.GROUP BYcustomer_info를 선택한 다음 GROUP_CONCAT를 사용하여 전화 ID와 전화 번호가 포함된 문자열 1개를 가져옵니다.

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_OBJ(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<>fidle에서 테스트

언급URL : https://stackoverflow.com/questions/51890605/getting-multidimensional-array-from-right-table-results

반응형