Utilisateurs WordPress et usermeta - joindre plusieurs lignes dans une table à une rangée dans une autre table

Je veux créer une vue à partir de deux le wp_users et wp_usermeta tables de sorte que je peux interroger les lignes dans la vue à partir d'une application externe. Basic auth détails sont stockés dans wp_users (par exemple, nom d'utilisateur, mot de passe, email, id) et d'autres champs sont stockés dans des paires clé/valeur dans la table wp_usermeta.

la table wp_users est structuré comme suit:

id | login | password | email
-----------------------------
1  | bsmith| abc123   | b@foo.com
2  | jjones| def456   | k@bah.com

la table wp_usermeta est structuré comme suit:

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

Je veux retrouver avec des données comme MYSQL VUE:

id | login | password | email    | firstname | lastname | country
-----------------------------------------------------------------
1  | bsmith| abc123   | b@foo.com| bob       | smith    | denmark
2  | jjones| def456   | k@bah.com| jan       | jones    | germany

Je sais que j'ai besoin de faire au moins une jointure interne entre wp_users et wp_usermeta, cependant j'ai aussi besoin d'effectuer une sous-requête à l'intérieur de wp_usermeta à se joindre à ces lignes ensemble.

La requête que j'ai pour l'obtention de la ligne d'utilisateur est bien sûr morte facile:

select u1.id, u1.login, u1.password, u1.email from wp_users u1

La requête que j'ai pour l'obtention de la méta comme une ligne c'est:

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'

Alors, comment dois-je joindre à ces deux requêtes - u1 données et la ligne où u1.id = m1.nom d'utilisateur?

source d'informationauteur frumbert