programing

여러 테이블에서 선택 - 1 대 다 관계

bestcode 2022. 11. 17. 21:11
반응형

여러 테이블에서 선택 - 1 대 다 관계

이런 테이블이 있습니다.

테이블 제품

[ID | 이름]

테이블 이미지

[ Product _ Id | URL | 주문번호]

테이블 가격

[제품 ID | 조합 | 통화 | 가격]

표 수량

[제품 ID | 조합 | 수량]


테이블 제품은 다른 테이블과 일대다로 관련되어 있습니다.테이블을 쿼리하여 다음과 같은 결과를 얻을 필요가 있습니다(의사 배열).

[
    ProductId: 1,
    Name: 'Sample product',
    Images: [
        [url, 1],
        [url, 2]
    ],
    Prices: [
        [aaa, USD, 50.00],
        [aaa, EUR, 50.00],
        [bbb, USD, 59.00],
        [bbb, EUR, 59.00]
    ],
    Quantities: [
        [aaa, 5],
        [bbb, 3]
    ]
]

현재 제가 하고 있는 방법은 다음과 같습니다.모든 제품을 조회하고 ID를 나열한 다음 각 테이블(이미지, 가격, 수량)을 조회합니다.WHERE IN절을 클릭합니다.모든 데이터가 있으면 원하는 구조를 얻기 위해 php의 테이블을 해석하기 시작합니다.

이러한 데이터를 추출할 수 있는 더 좋은 방법이 없을까 생각합니다.이러한 테이블은 여러 가지가 있습니다만, 각각의 설정 파서를 작성하는 것은 다소 번거롭고 문제가 있습니다.mysql이 저에게 부담을 줄 가능성은 없습니까?

감사해요.

이 쿼리는 다음과 같은 기능을 제공합니다.

SELECT product.id, product.name, 
(SELECT group_concat(CONCAT('["',images.url, '",',  images.order_number,']')) FROM images WHERE images.product_id = product.id GROUP BY (product.id)) AS IMAGES_LIST,
(SELECT GROUP_CONCAT(CONCAT('["',prices.combination, '","', prices.currency, '",', prices.price,"]" )) FROM prices WHERE prices.product_id = product.id GROUP BY (product.id)) AS PRICE_LIST,
(SELECT GROUP_CONCAT(CONCAT('["',quantites.combination, '",',  quantites.quantity,"]")) FROM quantites WHERE quantites.product_id = product.id GROUP BY (product.id)) AS Quantity_LIST
FROM product WHERE product.id = 1
  • 먼저 제품을 입수하다
  • 서브패킷을 사용하는 각자에 대해 관련 이미지를 얻을 수 있으며 그룹 콘캣을 사용하여 하나의 필드에서 이미지를 얻을 수 있습니다.
  • 가격과 양에 있어서 같은 것

쿼리 결과

외부 키를 설정하면 사용이 더 간편해집니다(또한 더 효율적입니다).JOIN보다WHERE ... IN ....

필요한 데이터를 얻기 위해 테이블을 개별적으로 쿼리할 수 있습니다.Product Id = 1다음과 같습니다.

SELECT i.*
FROM Product prd
INNER JOIN Images i
ON prd.Id = i.Product_Id
WHERE Product_Id = 1;

SELECT prc.*
FROM Product prd
INNER JOIN Prices prc
ON prd.Id = prc.Product_Id
WHERE Product_Id = 1;

SELECT q.*
FROM Product prd
INNER JOIN Quantities q
ON prd.Id = q.Product_Id
WHERE Product_Id = 1;

제품에 대한 이러한 모든 정보를 포함하는 단일 결과 세트를 사용하는 것이 좋습니다.PHP로 식별하여 해석합니다.그렇게 하면 일이 더 간단해질 거야.

SELECT prd.ProductId, prd.Name, i.Url, i.Ordernumber, prc.Combination, prc.Currency, prc.Price,q.Combination, q.Quantity FROM Product prd INNER JOIN Images i ON prd.Id = i.Product_Id INNER JOIN Prices prc ON prd.Id = prc.Product_Id INNER JOIN Quantities q ON prd.Id = q.Product_Id WHERE Product_Id = 1;

언급URL : https://stackoverflow.com/questions/39523580/select-from-multiple-tables-one-to-many-relation

반응형