Problème comparaison entre deux requetes

Résolu
cs_jumano Messages postés 64 Date d'inscription dimanche 1 mai 2005 Statut Membre Dernière intervention 29 février 2008 - 8 avril 2007 à 21:18
cs_jumano Messages postés 64 Date d'inscription dimanche 1 mai 2005 Statut Membre Dernière intervention 29 février 2008 - 8 avril 2007 à 22:36
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

FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
8 avril 2007 à 22:26
 (... 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 ^^
3
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
8 avril 2007 à 21:27
SELECT ..... WHERE NOT IN ( SELECT ..... )

Il faut imbriquer les SELECT pour obtenir ce que tu veux.
0
cs_jumano Messages postés 64 Date d'inscription dimanche 1 mai 2005 Statut Membre Dernière intervention 29 février 2008
8 avril 2007 à 21:51
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)".
0
cs_jumano Messages postés 64 Date d'inscription dimanche 1 mai 2005 Statut Membre Dernière intervention 29 février 2008
8 avril 2007 à 22:36
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
0
Rejoignez-nous