내가 3 개 테이블mySQL의 데이터를 3 차원에서 2로 "병합"하는 올바른 방법은 무엇입니까?
레이블
UserValues 을
사용자가
레이블은 다음과 같습니다
1|First Name
2|Last Name
3|Favorite Book
etc...
사용자를 다음과 같습니다
1|[phone_number]
2|[phone_number]
etc....
UserValues은 다음과 같습니다
1| [label_id_for_First_Name] |John | [user_id]
2| [label_id_for_Last_Name] |Smith | [user_id]
3| [label_id_for_Fav_Book] |Moby Dick | [user_id]
etc...
일부 사용자는 일부 필드 (모든 기본 키로 사용되는 전화 번호를 제외하고 선택 사항)에서 작성되지 수 있습니다. 내가 같이이 데이터를 평평하게하는 하나의 질의 쓸 수있는 방법으로 난처한 상황에 빠진거야
:
uid |First_Name|Last_Name | Favorite_Book
[user_id]|John |Smith | Moby Dick //user has all fields filled in
[user_id]|Mary | [null] | Kite Runner //user didn't have a last name
아이디어는 라벨이 있었다으로는 많은 열에 대한 열 너비 성장 것입니다 이러한 특정 사용자와 관련되어 있습니다.
저는 사용자를 선택하고 모든 값이 오른쪽으로 나가는 사용자 당 1 행을 갖고 싶습니다.
몇 가지 쿼리에서이 작업을 수행하는 방법을 알 수 있지만이 작업을 수행하는 올바른 방법이 무엇인지 궁금해하고 있습니다. (어쩌면 여러 쿼리에서 수행하는 것이지만 그렇지 않을 수도 있습니다.)
TIA. 현재 데이터를 사용하고 예에서 결과를 제공하는 쿼리를 작성하려면
체크 아웃 EAV 패턴 (그것을 구글) . – Dani
열이 _ 알 수없는 일반 열인 경우 별도의 값 표 대신 표에 포함 시키십시오. 열이 _unknown_ 인 경우 원하는 열을 선택하지 않고도 합리적인 표보기를 동적으로 얻으려면 어떻게해야합니까? 수천 개의 열을 사용할 수 없습니까? –
@ Dr.Dredel : [데이터베이스 정규화 규칙] (http://en.wikipedia.org/wiki/Database_normalization)을 직접 배우십시오. 테이블 스키마는 1NF에도 없습니다. 단일 셀은 도메인/열에 속한 단일 고유 값을 가져야합니다. 다른 도메인에 속한 열 값은 같은 열에 섞어서는 안됩니다. – Shef