web-dev-qa-db-fra.com

Interrogation des adresses électroniques d'une liste d'utilisateurs avec le même nom de famille?

J'ai un site avec beaucoup d'utilisateurs et beaucoup d'entre eux ont le même nom de famille. Je souhaite recevoir les courriels de tous les utilisateurs portant le même nom de famille (IE: Smith) et ayant un message lié à un terme de taxonomie particulier (IE: Baseball).

Jusqu'à présent, j'ai ce code qui fonctionne très bien pour obtenir tous les utilisateurs avec le même nom de famille (grâce à Mike Schinkel ). Je crains d’utiliser la fonction JOIN, mais j’apprends et j’en ai vraiment besoin le plus tôt possible, j’ai donc besoin d’aide.

$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); 

Votre temps est grandement apprécié et je vais le payer en avant. Merci.

2
Holidaymaine

Bonjour @ Holidaymaine:

Voici la requête que vous recherchez:

<?php

include( '../wp-load.php' );

$sql =<<<SQL
SELECT DISTINCT
  u.user_email AS user_email,
  um.meta_value AS user_lastname
FROM
  {$wpdb->users} AS u
  LEFT JOIN {$wpdb->usermeta} AS um ON u.ID = um.user_id
  LEFT JOIN {$wpdb->posts} AS p ON u.ID = p.post_author
  LEFT JOIN {$wpdb->term_relationships} AS tr ON p.ID = tr.object_id
  LEFT JOIN {$wpdb->term_taxonomy} AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id
  LEFT JOIN {$wpdb->terms} AS t ON tt.term_id = t.term_id
WHERE 1=1
  AND u.user_status = '0'
  AND um.meta_key = 'last_name'
  AND um.meta_value = '%s'
  AND t.slug = '%s'
SQL;
  $sql = $wpdb->prepare( $sql, 'Smith', 'baseball' );
  $usersemails = $wpdb->get_results( $sql );
  header( 'Content-type:text/plain' );
  print_r( $usersemails );
1
MikeSchinkel