LEFT JOIN, OUTER JOIN INNER, LEFT OUTER JOIN me rend fou. Il vous plaît aider?
Question
autres! codeurs Je l'avoir mal REJOIGNEZ tables (ing).
J'ai beaucoup d'un des utilisateurs sur mon site et beaucoup d'entre eux ont les mêmes noms de famille. Je suis en train de faire leurs e-mails par leur nom de famille. WP stocke les e-mails dans la table des utilisateurs et des noms d'utilisateur dans le usermeta et j'ai essayé d'utiliser JOIN pour obtenir ce que je veux, mais je ne comprends pas comment cela fonctionne et je suis sur le point d'abandonner pour la journée. Voilà ce que j'ai au bout de 4,5 heures.
$usersemails = $wpdb->get_results("SELECT users.user_email, usermeta.meta_value
FROM $wpdb->users
LEFT JOIN $wpdb->usermeta ON $wpdb->users.ID = $wpdb->usermeta.user_id
WHERE user_status = '0'
AND meta_value = 'Smith'");
Toute aide est appréciée, alors pouvez-vous aider? Merci.
La solution
Salut @Holidaymaine :
Je ne sais pas où vous faites mal, mais essayez ce qui suit à la place qui est un fichier test.php
autonome, vous pouvez tomber dans la racine de votre site Web et la charge dans votre navigateur avec http://yoursite.com/test.php
(en supposant que vous remplacez yoursite.com
avec votre son site ! domaine aussi, notez comment j'ajouter dans un WHERE {$wpdb->usermeta}.meta_key = 'last_name'
pour vous assurer ne pas obtenir les dossiers que vous n'attendiez pas):
<?php
/*
Filename: test.php
*/
include('wp-load.php');
$sql =<<<SQL
SELECT
{$wpdb->users}.user_email,
{$wpdb->usermeta}.meta_value
FROM
{$wpdb->users}
LEFT JOIN {$wpdb->usermeta} ON {$wpdb->users}.ID = {$wpdb->usermeta}.user_id
WHERE 1=1
AND {$wpdb->users}.user_status = '0'
AND {$wpdb->usermeta}.meta_key = 'last_name'
AND {$wpdb->usermeta}.meta_value = 'Smith'
SQL;
$usersemails = $wpdb->get_results($sql);
header('Content-type:text/plain');
print_r($usersemails);
Autres conseils
Vous pouvez le faire via l'API, la recherche de l'utilisateur se est améliorée 3.1
$search = new WP_User_Query(array(
'meta_value' => 'Lastname',
'fields' => array('user_email'),
));
var_dump($search->get_results());
SELECT users.user_email, usermeta.meta_value
Devrait être:
SELECT $wpdb->users.user_email, $wpdb->usermeta.meta_value
matière Prefixes.