질문:
';'을 기반으로 조인해야 하는 데이터가 여러 테이블에 있습니다. (세미콜론)은 열의 값을 구분합니다. 결과를 조작하기 위해 PHP나 다른 언어를 사용할 수 없습니다. MySQL만 사용하여 이를 달성할 수 있는 방법이 있습니까?
답변:
예, ';'에 가입할 수 있습니다. 순수 MySQL을 사용하여 열의 값을 구분합니다. 아래는 해결 방법에 대한 자세한 설명입니다.
구분된 문자열을 행으로 변환
핵심은 ';' 구분된 문자열을 일련의 행으로 나눕니다. 이는 다음 단계를 사용하여 달성할 수 있습니다.
User_resource 테이블을 정규화하는 쿼리
<code class="sql">SELECT user_resource.user, user_resource.resources, COUNT_IN_SET(user_resource.resources, ';') AS resources_count, isequence.id AS resources_index, VALUE_IN_SET(user_resource.resources, ';', isequence.id) AS resources_value FROM user_resource JOIN integerseries AS isequence ON isequence.id <= COUNT_IN_SET(user_resource.resources, ';') ORDER BY user_resource.user, isequence.id</code>
다음을 사용하여 정규화된 테이블 조인 리소스 테이블
user_resource 테이블이 정규화되면 리소스 테이블과 조인하여 원하는 결과를 얻을 수 있습니다.
<code class="sql">SELECT user_resource.user, resource.data FROM user_resource JOIN integerseries AS isequence ON isequence.id <= COUNT_IN_SET(user_resource.resources, ';') JOIN resource ON resource.id = VALUE_IN_SET(user_resource.resources, ';', isequence.id) ORDER BY user_resource.user, resource.data</code>
샘플 입력 및 출력
user_resource 테이블:
user | resources |
---|---|
user1 | 1;2;4 |
user2 | 2 |
user3 | 3;4 |
resource 테이블:
id | data |
---|---|
1 | data1 |
2 | data2 |
3 | data3 |
4 | data4 |
5 | data5 |
Normalizeduser_resource 테이블:
user | resources | resources_count | resources_index | resources_value |
---|---|---|---|---|
user1 | 1;2;4 | 3 | 1 | 1 |
user1 | 1;2;4 | 3 | 2 | 2 |
user1 | 1;2;4 | 3 | 3 | 4 |
user2 | 2 | 1 | 1 | 2 |
user3 | 3;4 | 2 | 1 | 3 |
user3 | 3;4 | 2 | 2 | 4 |
출력(결합된 결과):
user | data |
---|---|
user1 | data1 |
user1 | data2 |
user1 | data4 |
user2 | data2 |
위 내용은 세미콜론으로 구분된 값을 기반으로 MySQL에서 테이블을 조인할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!