나는 세 개의 테이블이 있습니다몇 가지 JOINS (MySQL)을 수행하는 것보다 효율적인 방법이 있습니까?
USER: user_id (pk); username
FIELD: field_id (pk); name
METADATA: metadata_id (pk); field_id (indx); user_id (indx); value
응용 프로그램이 사용자 정의 필드는 각 사용자에 대해 생성 할 수 있는지 이에 대한 추론입니다. 이처럼 보이는 끝나는 사용자 내가 (PHP를 통해) 동적 쿼리를 구축하고 모든 정보를 표시하려면 :
SELECT
u.username, m1.value AS m1value, m2.value AS m2value
FROM user AS u
LEFT JOIN metadata AS m1
ON (u.user_id=m1.user_id AND m1.field_id=1)
LEFT JOIN metadata AS m2
ON (u.user_id=m2.user_id AND m2.field_id=2)
이 예에서는 2 사용자 메타 데이터 필드를 가지고,하지만 당신은 아이디어를 얻을 어떤 방법이 것 12 개 필드가 있는지 살펴보십시오.
이 쿼리를 작성하는 또 다른 방법이 있습니까? 사용자 및 메타 데이터 필드가 커짐에 따라이 쿼리의 성능이 걱정됩니다.
편집 : 반환 된 결과에서 행당 한 명의 사용자를 보유하고 싶습니다.
네,하지만 이상적으로 사용자 당 하나의 행을 반환하고 싶습니다. – Bart
PHP/MYSQL은 서버 코드/db – Bart
바트입니다.이 방법으로 반환하는 것이 더 빠를 수 있으며 응용 프로그램에서이를 피벗하게 할 수도 있습니다. 더 이상 동적으로 쿼리를 빌드 할 필요가 없습니다. 또한 동적 쿼리에 추가 할 사용자 정의 필드의 수를 파악하기 위해 미리 코드를 보내야 할 필요도 없습니다. – HLGEM