Chcę utworzyć widok zarówno z tabel wp_users, jak i wp_usermeta, aby umożliwić zapytanie o wiersze w widoku z aplikacji zewnętrznej. Podstawowe szczegóły uwierzytelnienia są przechowywane w wp_users (np. Nazwa użytkownika, hasło, adres e-mail, identyfikator), a inne pola są przechowywane w parach klucz/wartość w tabeli wp_usermeta.Użytkownicy Wordpress i usermeta - łączenie wielu wierszy w jednej tabeli z jednym wierszem w innej tabeli
tabela wp_users jest skonstruowany tak:
id | login | password | email
-----------------------------
1 | bsmith| abc123 | [email protected]
2 | jjones| def456 | [email protected]
tabela wp_usermeta jest skonstruowany tak:
id | user_id | meta_key | meta_value
------------------------------------
1 | 1 | firstname| bob
2 | 1 | lastname | smith
3 | 1 | country | denmark
4 | 2 | firstname| jan
5 | 2 | lastname | jones
6 | 2 | country | germany
Chcę skończyć z danych takich jak ta w widoku MySQL:
id | login | password | email | firstname | lastname | country
-----------------------------------------------------------------
1 | bsmith| abc123 | [email protected]| bob | smith | denmark
2 | jjones| def456 | [email protected]| jan | jones | germany
Wiem, że muszę zrobić co najmniej wewnętrznego sprzężenia między wp_users i wp_usermeta, jednak ja również trzeba wykonać sub-zapytanie wewnątrz wp_usermeta, aby połączyć te wiersze razem.
Kwerenda mam uzyskania wiersz użytkownika jest oczywiście martwy proste:
select u1.id, u1.login, u1.password, u1.email from wp_users u1
Kwerenda mam dla uzyskania meta jako wiersz ten brzmi:
select m1.user_id, m1.meta_value as firstname, m2.meta_value as lastname, m3.meta_value as country
from wp_usermeta m1
join wp_usermeta m2 on (m1.user_id = m2.user_id and m2.meta_key = 'last_name')
join wp_usermeta m3 on (m2.user_id = m3.user_id and m3.meta_key = 'country')
where m1.meta_key = 'first_name'
Więc jak zrobić Łączę te dwa zapytania razem - dane u1 i wiersz gdzie u1.id = m1.userid?
Planujesz na poszukiwaniu użytkowników na podstawie niektórych właściwości meta_value? jeśli nie, możesz po prostu przechowywać atrybuty w jednym serializowanym polu meta_value (kodowane json lub php serializowane) – Ben
@Ben: nie, zewnętrzna aplikacja będzie łączyć się z zapytaniami danych interaktywnie – frumbert