2010-07-02 9 views
0

J'écris un module qui permet d'ajouter rapidement des utilisateurs en fournissant Prénom et Nom (sans adresse ou nom d'utilisateur). Ces utilisateurs sont "fantômes", juste pour un usage temporaire. Avant d'ajouter un module utilisateur, vérifiez si l'utilisateur avec le même prénom et le même nom existe déjà dans le système pour éviter de créer plusieurs utilisateurs fantômes avec les mêmes noms. En d'autres termes - J'ai besoin d'une requête sql pour filtrer les utilisateurs par le dernier prénom AND. Comme jusqu'à présent j'ai pu produire une telle requête:Drupal recherche utilisateur par profil nom et prénom requête

$sql = "SELECT DISTINCT u.uid AS uid FROM users u INNER JOIN profile_values pv ON u.uid = pv.uid INNER JOIN profile_fields pf ON pv.fid = pf.fid " 
       ."WHERE pf.fid = 2 AND pv.value = '%s'"; 
      $uid = db_fetch_object(db_query("$sql", $ln))->uid; 

Cette requête n'est pas bon enought car il trouve que l'utilisateur en faisant correspondre lastname. Je ne suis pas expert sql, mais je ne sais pas comment joindre les tables pour affiner les résultats si prenom et nomFamille sont présents: Quelque chose comme ça

WHERE pf.fid = 2 AND pv.value = 'LASTNAME' AND pf.fid = 1 AND pv.value = 'FIRSTNAME'; 

Dans ma table profile_fields je: fid = 2 -> lastname fid = 1 -> firstname

Et la dernière clause WHERE ne fonctionnera pas. J'espère que ceux qui sont familiers avec la relation des tables de profil utilisateur dans le système Drupal savent ce que je demande.

Répondre

2

vous devez joindre deux fois avec des alias différents. Quelque chose comme:

$sql = "SELECT DISTINCT u.uid AS uid FROM {users} u 
INNER JOIN {profile_values} pv ON u.uid = pv.uid 
INNER JOIN {profile_fields} pf ON pv.fid = pf.fid 
INNER JOIN {profile_values} pv2 ON u.uid = pv2.uid 
INNER JOIN {profile_fields} pf2 ON pv2.fid = pf2.fid 
WHERE pf.fid = 2 
AND pv.value = '%s' 
AND pf2.fid = 1 
AND pv2.value = '%s'"; 

$uid = db_fetch_object(db_query("$sql", array($ln, $fn)))->uid; 

Aussi avec drupal vous devriez mettre {} autour des noms de table.

+0

Vous êtes bon. Cela a fonctionné comme un charme et une requête si propre. J'ai essayé de voir comment le module Views le construira mais il en produira beaucoup un sale ;-) – Lukasz

+0

Oui. Je connaissais {}. Je viens de le coller de mon générateur de requêtes. – Lukasz

Questions connexes