> 데이터 베이스 > MySQL 튜토리얼 > 열에서 쉼표로 구분된 값을 사용하여 테이블을 조인하는 방법은 무엇입니까?

열에서 쉼표로 구분된 값을 사용하여 테이블을 조인하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-08 12:00:21
원래의
393명이 탐색했습니다.

How to Join Tables with Comma-Separated Values in a Column?

쉼표로 구분된 값으로 테이블 조인

데이터베이스 정규화는 효율적인 데이터 관리에 중요하지만 때로는 프로젝트에서 정규화되지 않은 형식으로 기존 데이터를 처리해야 할 수도 있습니다. 이 문서에서는 주어진 열에서 쉼표로 구분된 값을 사용하여 두 테이블을 조인하는 기술을 살펴봅니다.

시나리오:
두 개의 테이블이 있다고 가정합니다.

  • 메모 테이블:

    • nid: 노트 ID
    • forDepts: 쉼표로 구분된 부서 ID
  • 직위 테이블:

    • id: 직위 ID
    • 이름: 직위 name

우리의 목표는 이러한 테이블을 조인하고 forDepts 열을 Positions 테이블의 값과 연결하여 쉼표로 구분된 직위 이름으로 새 열을 생성하는 것입니다.

사용하는 솔루션 CONCAT_WS:

SELECT n.nid,
       CONCAT_WS(', ', p.name) AS DepartmentName
FROM   Notes n
JOIN   Positions p
       ON n.forDepts = p.id
로그인 후 복사

그러나 이 접근 방식은 일치하는 모든 부서가 아닌 각 부서 ID에 대해 첫 번째 일치만 검색합니다.

FIND_IN_SET을 사용하는 솔루션:

SELECT  a.nid,
        GROUP_CONCAT(b.name ORDER BY b.id) AS DepartmentName
FROM    Notes a
        INNER JOIN Positions b
            ON FIND_IN_SET(b.id, a.forDepts) > 0
GROUP   BY a.nid
로그인 후 복사

FIND_IN_SET 함수는 값이 다음과 같은지 확인합니다. 쉼표로 구분된 문자열로 표시됩니다. JOIN 조건에서 이를 사용함으로써 일치하는 모든 위치가 포함되도록 보장합니다. GROUP_CONCAT 함수는 검색된 직위 이름을 쉼표로 구분하여 연결합니다.

PHP 코드 통합:

주어진 PHP 코드를 수정하여 확장된 DepartmentName 열을 검색할 수 있습니다. 위에서 제안한 솔루션을 사용하여 mysql_query 문에 쿼리를 추가합니다. 이렇게 하면 코드가 쉼표로 구분된 위치 이름을 올바르게 내보낼 수 있습니다.

참고:
데이터베이스를 정규화하는 것이 이상적이지만 정규화되지 않은 데이터를 처리해야 하는 경우도 있습니다. 이 문서에서 설명하는 기술은 이러한 시나리오에서 테이블을 효율적으로 조인하고 쉼표로 구분된 값을 집계하기 위한 솔루션을 제공합니다.

위 내용은 열에서 쉼표로 구분된 값을 사용하여 테이블을 조인하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿