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
Po pierwsze, jak wspomnieli inni, jednym z powodów, dla których pisanie tego zapytania jest tak kłopotliwe, jest to, że musisz użyć struktury EAV. Koncepcja „meta” stołu jest tak naprawdę przekleństwem dla projektowania relacyjnego. Po drugie, aby uzyskać informacje z EAV, musisz utworzyć tak zwane zapytanie krzyżowe, w którym tworzysz kolumny, które chcesz w zapytaniu. Ogólnie rzecz biorąc, relacyjne bazy danych nie są przeznaczone do generowania kolumn w locie, tak jak robię to w moim rozwiązaniu, i są wymagane dla EAV.