Problème comparaison entre deux requetes [Résolu]

Signaler
Messages postés
64
Date d'inscription
dimanche 1 mai 2005
Statut
Membre
Dernière intervention
29 février 2008
-
Messages postés
64
Date d'inscription
dimanche 1 mai 2005
Statut
Membre
Dernière intervention
29 février 2008
-
Bonsoir,
J'ai deux tables :
La premiere qui se nomme 'affectation' avec les champs suivants :
ID_AFFECT, ID_COURAR, ID_BUREAUACT et ID_BUREAUINF.
La seconde 'bureau' avec les champs suivants :
ID_BUREAU et BUREAU.
Je fais deux requêtes :
<!-- BEGIN TEMPLATE: bbcode_code -->
 
<?php
$colname_rsAffectation = "-1";
if(isset($_GET['id_courar'])){
  $colname_rsAffectation = (get_magic_quotes_gpc()) ? $_GET['id_courar'] : addslashes($_GET['id_courar']);
}
mysql_select_db($database_CnxCourrier, $CnxCourrier);
$query_rsAffectation = sprintf("SELECT affectation.ID_COURAR, affectation.ID_BUREAUACT, affectation.ID_BUREAUINF FROM affectation, bureau WHERE affectation.ID_COURAR='%s' ", $colname_rsAffectation);
$rsAffectation = mysql_query($query_rsAffectation, $CnxCourrier) or die(mysql_error());
$row_rsAffectation = mysql_fetch_assoc($rsAffectation);
$totalRows_rsAffectation = mysql_num_rows($rsAffectation);
 
mysql_select_db($database_CnxCourrier, $CnxCourrier);
$query_rsBureaux = "SELECT bureau.ID_BUREAU, bureau.BUREAU FROM bureau ORDER BY bureau.ID_BUREAU ASC";
$rsBureaux = mysql_query($query_rsBureaux, $CnxCourrier) or die(mysql_error());
$row_rsBureaux = mysql_fetch_assoc($rsBureaux);
$totalRows_rsBureaux = mysql_num_rows($rsBureaux);
?>

La première requête m'indique les identifiants des bureau ayant eu pour affectation un courrier soit pour ACTION(id_bureauact) soit pour INFO(id_bureauinf).
La seconde me renvoi l'ensemble de la liste des bureaux existants.
Mon soucis est le suvant :
Je n'arrive pas à trouver la façon de comparer ces deux requêtes afin de ressortir la liste des bureaux qui n'ont pas eu d'affectation.
Merci.<!-- / message -->

4 réponses

Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
 (... WHERE bureau.ID_BUREAU <> SELECT affectation.ID_COURAR, affectation.ID_BUREAUACT, affectation.ID_BUREAUINF ... )

Voila ce que donne ta requète écrite comme tu l'as fait.

Il faut faire un select que sur le numéro d'ID_bureau.
On compare des numéros d'ID ici... et toi tu lui mets 3 colonnes d'un coup !

Lui il n'en veux qu'une seule, voila pourquoi il te dit erreur ^^
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
SELECT ..... WHERE NOT IN ( SELECT ..... )

Il faut imbriquer les SELECT pour obtenir ce que tu veux.
Messages postés
64
Date d'inscription
dimanche 1 mai 2005
Statut
Membre
Dernière intervention
29 février 2008

J'ai modifié pma deuxième requete coomme ceci :
<?php
$idcourar = $_GET['id_courar'];

mysql_select_db($database_CnxCourrier, $CnxCourrier);
$query_rsBureaux = "SELECT bureau.ID_BUREAU, bureau.BUREAU FROM bureau WHERE bureau.ID_BUREAU NOT IN (SELECT affectation.ID_COURAR, affectation.ID_BUREAUACT, affectation.ID_BUREAUINF FROM affectation WHERE affectation.ID_COURAR='$idcourar')";
$rsBureaux = mysql_query($query_rsBureaux, $CnxCourrier) or die(mysql_error());
$row_rsBureaux = mysql_fetch_assoc($rsBureaux);
$totalRows_rsBureaux = mysql_num_rows($rsBureaux);
?>
J'obtient le message d'erreur suivant :
"Operand should contain 1 column(s)".
Messages postés
64
Date d'inscription
dimanche 1 mai 2005
Statut
Membre
Dernière intervention
29 février 2008

Merci des conseils, cela fonctionne impec avec la requête suivante :

SELECT bureau.ID_BUREAU, bureau.BUREAU
FROM bureau
WHERE bureau.ID_BUREAU NOT IN (SELECT affectation.ID_BUREAUACT FROM affectation WHERE affectation.ID_COURAR='idcourar') AND bureau.ID_BUREAU NOT IN (SELECT affectation.ID_BUREAUINF FROM affectation WHERE affectation.ID_COURAR='idcourar')

Meri encore