Besoin d'aide requête MySQL

Besoin d'aide requête MySQL - SQL/NoSQL - Programmation

Marsh Posté le 23-12-2004 à 12:11:44    

Bonjour,
 
je bloque sur une requetes depuis plusieurs jours.
 
Le but de la requete est  de retourner la liste des postes qui ne possède pas le logiciel $un_pa (variable selectionné dans une liste)
 
Ma table est composé de deux champs : le premier UC_NOM (contenant le nom du poste) et le deuxieme CAPTION (contenant le nom du logiciel)
 
on peux retrouver dans la table plusieurs fois la meme valeur UC_NOM mais avec des Caption différentes.
 [:nul_olive]  
 
pouvez vous m'aider.
 
j'avais pensé à la requete suivante :
 
 
$query_s = "SELECT * FROM `software` Where Caption=\"". $un_pa ."\"";
$result_i = mysql_db_query($dbName_s, $query_s);
 
 while ($row_a = mysql_fetch_array($result_i)) {
   $subquery_s = "SELECT UC_NOM, Caption FROM `software` Where NOT (Caption=\"". $un_pa ."\" OR UC_NOM=\"". $row_a["UC_NOM"]."\" ) Group By UC_NOM";
   $subresult_i = mysql_db_query($dbName_s, $subquery_s);
   while ($row_b = mysql_fetch_array($subresult_i)) {
   $free_s .= "<TR class=" . $class_s . ">\n" .
                "<TD>&nbsp;" . stripslashes(htmlentities($row_b["UC_NOM"], ENT_QUOTES)) . "</TD></TR>\n";
 
   }

Reply

Marsh Posté le 23-12-2004 à 12:11:44   

Reply

Marsh Posté le 23-12-2004 à 18:21:33    

Tu peux le faire avec un NOT IN si ta version de mySql est récente.
 
Je vais supposer que ce n'est pas le cas ...
Tu peux alors le faire comme ça :
 

Code :
  1. SELECT DISTINCT s1.uc_nom
  2. FROM software s1
  3. LEFT JOIN software s2 ON s2.uc_nom = s1.uc_nom
  4. WHERE s2.caption = '$un_pa'
  5. AND s2.uc_nom IS NULL;


 
explication ici :
 
http://mysql.developpez.com/faq/?p [...] s_requetes

Reply

Marsh Posté le 24-12-2004 à 10:49:37    

Merci pour cette reponse.
 
je vais regarder.

Reply

Marsh Posté le 24-12-2004 à 15:01:05    

ca marche pas faort mais voici la requete qui me convient
 
SELECT UC_NOM FROM `software` Where NOT IN(SELECT UC_NOM as BOB, Caption FROM `software` Where Caption="$log" ) Group By UC_NOM
 
 
Le seul problème est que j'utilise une version 4.0 de mysql; donc ca ne marche pas.
 
bref comment puis-je faire cette requete
 
merci

Reply

Marsh Posté le 24-12-2004 à 15:21:36    

Regarde le lien que je t'ai passé y a des infos sur la transformation d'un NOT IN en jointure externe. Tu devrais arriver à qqch approchant ce que j'ai mis plus haut.

Reply

Marsh Posté le 24-12-2004 à 15:37:35    

Bon je viens de changer la version de mysql je suis passé en 4.1 mais ca ne marche toujours pas  
il doit surement avoir une erreur de synthaxe dans ma requete
 
la voici
SELECT UC_NOM FROM `software` Where UC_NOM NOT IN (SELECT UC_NOM FROM `software` Where Caption="Winzip" )Group By UC_NOM
 
Mais ca ne marche pas

Reply

Marsh Posté le 24-12-2004 à 15:47:32    

Fais plutôt :
 

Code :
  1. SELECT DISTINCT s1.uc_nom
  2. FROM `software` s1
  3. WHERE NOT EXISTS
  4.     (SELECT s2.uc_nom
  5.      FROM `software` s2
  6.      WHERE s2.uc_nom = s1.uc_nom
  7.      AND caption = "Winzip" );

Reply

Marsh Posté le 24-12-2004 à 17:24:36    

c'est ok ça fonctionne.
 
Merci

Reply

Marsh Posté le 25-12-2004 à 12:04:17    

En plus c'est plus performant que le NOT IN ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed