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
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé que de Voté la solution fonctionne, mais est une performance de porc sur une base de données MySQL environ 17 secondes pour exécuter un "select * from users_with_meta_view".
J'ai eu cela à l'0.0054 sec avec une vue structurée comme ceci à la place:
Autant que je sache, vous le faites de la bonne façon, il suffit de les mettre tous ensemble: