Select wp_users.ID
, wp_users.user_login
, wp_users.user_email
, wp_users.user_nicename
, Min( Case When wp_usermeta.meta_key = 'first_name' Then wp_usermeta.meta_value End ) As first_name
, Min( Case When wp_usermeta.meta_key = 'last_name' Then wp_usermeta.meta_value End ) As last_name
, Min( Case When wp_usermeta.meta_key = 'address' Then wp_usermeta.meta_value End ) As address
, Min( Case When wp_usermeta.meta_key = 'dob' Then wp_usermeta.meta_value End ) As dob
From wp_user
Join wp_usermeta
On wp_usermeta.user_id = wp_user.ID
Where Exists (
Select 1
From wp_usermeta As Meta1
Where Meta1.user_id = wp_user.id
And Meta1.meta_key = 'wp_user_level'
And Meta1.meta_value = '0'
)
And wp_usermeta.meta_key In('first_name','last_name','address','dob')
Group By wp_users.ID
, wp_users.user_login
, wp_users.user_email
, wp_users.user_nicename
For det første, som andre har nævnt, er en af grundene til, at denne forespørgsel er så besværlig at skrive, at du skal bruge en EAV-struktur. Konceptet med en "meta"-tabel er virkelig et forbud mod relationelt design. For det andet, for at få information ud af en EAV, skal du oprette det, der kaldes en krydstabulatorforespørgsel, hvor du bygger de kolonner, du ønsker i din forespørgsel. Generelt er relationelle databaser ikke designet til on-the-fly kolonnegenerering, som jeg gør i min løsning og er påkrævet for EAV'er.