requêtage et selection d'enregistrements différents de...

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : requêtage et selection d'enregistrements différents de...

par Ryle » 20 sept. 2006, 10:37

Concernant la structure de ta base, lorsque tu as deux associations de type 0..n (c'est à dire qu'un Utilisateur peut être rattaché de 0 à n Affaire(s) et qu'une Affaire peut être affectée à 0 ou n Utilisateur), il vaut mieux passer par une table de liaison.
Tu aurais ainsi ta table "personnel" (id_personnel, nom, prenom, ...) , ta table "affaire" (id_affaire, libellé, ...) et enfin une table permettant de faire le lien entre les deux "lien_perso_affaire" (id_personnel, id_affaire) ce couple étant unique (un utilisateur ne pouvant être rattaché deux fois à la même affaire et réciproquement)

A noter qu'il est préférable d'utiliser l'identifiant unique (et invisible pour l'utilisateur) de ta table (id_personnel) plutôt que de passer par un login ou un champ qui pourrait être un jour susceptible de changer (ça ficherait en l'air toutes tes associations et demanderait)

Ceci étant, pour en revenir à ta question :) (ouais, quand même hein ;))
Si ta version de mysql te le permet, tu peux effectuer des sous requêtes dans tes conditions. Tu pourrais ainsi aller chercher tous les utilisateurs (requête principale) qui ne sont pas dans la liste des utilisateurs affectés à cette affaire (sous requête) :

Code : Tout sélectionner

SELECT ... FROM personnel WHERE id_personnel NOT IN ( SELECT id_personnel FROM affaire WHERE ... )
Si ta version de mysql ne gère pas encore les sous requêtes, je pense que ramener l'ensemble des résultats et faire un traitement php sera plus pratique à mettre en place. Tu ramènes d'un côté la liste des utilisateurs associés à ton affaire, de l'autre la liste de tous les utilisateurs.
Tu colles tout ça dans deux tableaux et tu fais un un array_diff() pour récupérer la liste des utilisateurs non affectés à ton affaire :)

requêtage et selection d'enregistrements différents de...

par Trappeur » 20 sept. 2006, 02:25

Bonjour a tous,
Voici mon problème.
J’ai une table PERSONNEL (Id, Nom,Prenom,LoginPers) comportant les noms et infos définissant des personnes.
J’ai une table AFFAIRES (Id, LoginPers, Affaire)
Vous l’avez probablement déjà compris : cette structure me permet de gérer des affectations entre des personnes et des affaires.
Pour une affaire donnée, je souhaite développer une rubrique me permettant d’affecter une personne à une affaire (donc en bref de rajouter une ligne dans la table AFFAIRES).
Pour cela :
1- l’utilisateur choisi une affaire dans une liste ($Affaire)
2- Une page s’affiche et récapitule grace à une requête les personnes qui sont déjà affectées à l’affaire.
$sqlai = "Select Id, LoginPers, Affaire from AFFAIRES where Affaire = '".$Affaire."'";
$reqai = mysql_query($sqlai,$db) or die('Erreur SQL !<br>'.mysql_error());
3- Je souhaite alors mettre sur la même page une liste déroulante permettant à l’utilisateur de choisir les personnes restantes dans la table PERSONNEL et qui ne sont pas affectées à l’affaire ($Affaire). Pour cela je suis parti sur quelque chose comme ca :
while($dataa = mysql_fetch_array($reqai))
$dataa = mysql_fetch_array($reqai);
	{
	$LogChai = $dataa[' LoginPers '];	

	$sqlc = "Select Id, Nom,Prenom,LoginPers from PERSONNEL where LoginPers !='".$LogChai."' ORDER BY Nom ASC";
		$reqc = mysql_query($sqlc,$db) or die('Erreur SQL !<br>'.mysql_error());
	}
Et là ca se gâte. Comme vous l’avez compris, la requête $reqc est exécutée autant de fois qu’il y a de résultats sur la requête $requai (à cause du while), ce qui me donne une liste démentielle, qui fait en plus apparaître les personnes dont je ne veux pas voir le nom.

En bref, mon problème se résume à sélectionner dans la table PERSONNEL toutes les personnes à l’exception d’un certain nombre défini dans ma première requête.
Avez-vous une idée ?? je suis bien sur prêt à remettre mon approche en question, ce n’est peut-être pas la meilleure.
D’avance merci