하위 쿼리의 문자열을 MySQL의 단일 행으로 연결하려면 어떻게 해야 합니까?
세 개의 테이블이 있습니다.
table "package"
-----------------------------------------------------
package_id int(10) primary key, auto-increment
package_name varchar(255)
price decimal(10,2)
table "zones"
------------------------------------------------------
zone_id varchar(32) primary key (ex of data: A1, Z2, E3, etc)
table "package_zones"
------------------------------------------------------
package_id int(10)
zone_id varchar(32)
제가 하려는 것은 패키지 테이블의 모든 정보와 해당 패키지에 대한 영역 목록을 반환하는 것입니다.나는 알파벳순으로 정렬된 구역 목록과 쉼표로 구분된 구역 목록을 원합니다.
그래서 제가 찾고 있는 출력은 다음과 같습니다.
+------------+---------------+--------+----------------+
| package_id | package_name | price | zone_list |
+------------+---------------+--------+----------------+
| 1 | Red Package | 50.00 | Z1,Z2,Z3 |
| 2 | Blue Package | 75.00 | A2,D4,Z1,Z2 |
| 3 | Green Package | 100.00 | B4,D1,D2,X1,Z1 |
+------------+---------------+--------+----------------+
원하는 결과를 얻기 위해 프레젠테이션 레이어를 사용하여 PHP로 무언가를 할 수 있다는 것을 알고 있습니다.문제는, 제가 분류할 수 있기를 원한다는 것입니다.zone_list ASC
또는DESC
심지어 사용하기도 합니다.WHERE zone_list LIKE
등등.그러기 위해서는 MySQL에서 이 작업을 수행해야 합니다.
어떻게 이 문제를 해결해야 할지 전혀 모르겠습니다.하위 쿼리를 사용하려고 했지만 여러 행에 대한 불만이 계속 제기되었습니다.하려고 했습니다.concat
여러 행을 하나의 문자열로 만들었지만 MySQL은 이것을 좋아하지 않습니다.
잘 부탁드립니다.
업데이트!
관심 있는 사용자를 위한 솔루션은 다음과 같습니다.
SELECT
`package`.*,
GROUP_CONCAT(`zones`.`zone` ORDER BY `zones`.`zone` ASC SEPARATOR ',' ) as `zone_list`
FROM
`package`,
`package_zones`
LEFT JOIN
(`zones`,`ao_package_zones`) ON (`zones`.`zone_id` = `package_zones`.`zone_id` AND `package_zones`.`package_id` = `package`.`package_id`)
GROUP BY
`ao_package`.`package_id`
GROUP_CONCAT() 함수와 GROUP BY 호출을 사용합니다.여기 쿼리 예제가 있습니다.
SELECT
p.package_id,
p.package_name,
p.price,
GROUP_CONCAT(pz.zone_id SEPARATOR ',') as zone_list
FROM
package p
LEFT JOIN package_zone pz ON p.package_id = pz.package_id
GROUP BY
p.package_id
여전히 zone_ids(또는 zone_list)로 주문할 수 있어야 합니다.LIKE
사용할 수 있습니다.WHERE zp.zone_id = 'Z1'
아니면 비슷한 것.
ps_orders, ps_customer table에서 작년 기록을 가져오기 위해 ps_orders 데이터베이스에서 사용할 쿼리를 생성해 달라고 요청한 고객이 있습니다. 이 열 중 하나는 ps_order_detail table의 "The list of product ids in the order"였습니다.그래서 제 질문 결과는 다음과 같습니다.
SELECT
o.id_order, o.reference,
(
SELECT
GROUP_CONCAT(od.product_id SEPARATOR ', ') AS products
FROM ps_order_detail od
WHERE od.id_order = o.id_order
GROUP BY od.id_order
) AS product_ids,
CONCAT(c.firstname, ' ', c.lastname) AS customer, o.current_state, o.payment, o.total_discounts,
o.total_discounts_tax_incl, o.total_discounts_tax_excl, o.total_paid, o.total_paid_tax_incl,
o.total_paid_tax_excl, o.total_products, o.total_products_wt, o.total_shipping, o.total_shipping_tax_incl,
o.total_shipping_tax_excl, o.carrier_tax_rate, o.total_wrapping, o.total_wrapping_tax_incl,
o.total_wrapping_tax_excl, o.invoice_number, o.delivery_number, o.valid
FROM ps_orders o
INNER JOIN ps_customer c ON c.id_customer = o.id_customer
WHERE
o.date_add <= NOW() AND o.date_add >= DATE_ADD(NOW(), INTERVAL - 12 MONTH);
결과:
언급URL : https://stackoverflow.com/questions/3935695/how-do-i-concatenate-strings-from-a-subquery-into-a-single-row-in-mysql
'source' 카테고리의 다른 글
감지되지 않은 오류:'AppModule' 모듈에서 예기치 않은 모듈 'FormsModule'을(를) 선언했습니다.@Pipe/@Directive/@Component 주석을 추가하십시오. (0) | 2023.07.28 |
---|---|
데이터를 사용하여 열의 데이터 유형을 변경하는 방법 (0) | 2023.07.28 |
웹어셈블리로 컴파일된 러스트 라이브러리에서 C 라이브러리를 사용하려면 어떻게 해야 합니까? (0) | 2023.07.28 |
Oracle SQL을 사용하여 요일 번호와 요일을 어떻게 출력합니까? (0) | 2023.07.23 |
S3 버킷에서 모든 파일을 다운로드하는 Boto3 (0) | 2023.07.23 |