web-dev-qa-db-fra.com

LEFT JOIN, INNER OUTER JOIN, LEFT OUTER JOIN me rend fou. S'il vous plaît aider?

collègues codeurs! J'ai un mal à rejoindre des tables (ing).

J'ai beaucoup d'utilisateurs sur mon site et beaucoup d'entre eux ont les mêmes noms de famille. J'essaie de recevoir leurs courriels par leur nom de famille. WP stocke les e-mails dans la table des utilisateurs et les noms d'utilisateur dans la console usermeta. 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. le jour. C'est ce que j'ai après 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 s'il vous plaît aider? Merci.

3
Holidaymaine

Bonjour @Holidaymaine :

Vous ne savez pas trop où vous vous trompez, mais essayez plutôt ce qui suit: il s'agit d'un fichier autonome test.php que vous pouvez déposer à la racine de votre site Web et charger dans votre navigateur http://yoursite.com/test.php(en supposant que vous remplacez yoursite.com par le domaine de votre site! Notez également que j’ajoute un WHERE {$wpdb->usermeta}.meta_key = 'last_name' pour vous assurer de ne pas obtenir d’enregistrements inattendus):

<?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);
3
MikeSchinkel

Vous pouvez le faire via l'API, la recherche des utilisateurs a été améliorée en 3.1

$search = new WP_User_Query(array(
             'meta_value' => 'Lastname',
             'fields' => array('user_email'),
                ));

var_dump($search->get_results());
2
Rarst

SELECT users.user_email, usermeta.meta_value

Devrait être:

SELECT $wpdb->users.user_email, $wpdb->usermeta.meta_value

Les préfixes importent.

1
Otto