Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2716 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  prb de requette

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

prb de requette

n°799667
gilles974
Posté le 19-07-2004 à 16:01:36  profilanswer
 

bonjour
je voudrais afficher toute les personnes qui ont le champ PG_PUB à 'Y' et prendre 1 article par les 9 disponibles
la requette tourne à 90% sauf quelle me selectionne des fois plusieurs articles de la meme personne
ou je me suis trompé
 
 <table border="0" summary="">
 <tr>
  <td align="center" colspan="2">&nbsp;</td>
 </tr>
 <?
 session_destroy();
 $query="select ID_USER from USERS where PG_PUB <> 'NULL'";  
   $ok = fm($query);
   $nbr = mysql_num_rows($ok);
 list($ID_USER)=mysql_fetch_row($ok);
   mysql_free_result($ok);
 
 echo"<table border=\"0\" align=\"center\" width=\"500\" cellspacing=\"0\">";
 echo"<tr>";
 echo"<td align=\"center\" colspan=\"3\" bgcolor='#c1d001'><b>NOS COUPS DE COEUR </b></td>";
 echo"</tr>";
 
 $query = "select distinct ARTICLE.ID_USER,RAISON,PHOTO,PG_PUB from ARTICLE,USERS ";
 $query .= "where USERS.PG_PUB != 'NULL' ";
 $query .= "and ARTICLE.ID_USER=USERS.ID_USER ";
 $query .= "ORDER BY RAND() LIMIT $nbr";  
 $pub = fm($query);
 //echo "<br><center>[query : ".$query."]</center>";
 $ligne=ceil($nbr/3);
 for($i=0;$i<$ligne;$i++)
      {
      echo"<tr>";
      for ($j=0;$j<3;$j++)
          {
    list($ID_USER,$RAISON,$PHOTO,$PG_PUB)=mysql_fetch_row($pub);
        if($PHOTO != "" )
      {
    echo"<td align=\"center\" class=\"raison\"><br>";
    echo"<a href=\"visu.php?action=galerie&expo=aff&page=Y&id_user=$ID_USER&pg_pub=$PG_PUB\">";
    echo"<img src=\"tmp/$PHOTO\" border=\"0\" width=\"150\" ></a><br>$RAISON";
    echo"</td>";
    }
    else
      {
      echo"<td align=\"center\">&nbsp;</td>";
      }
          }
        $l=0;
        $j=0;
       echo"</tr>";
       }
     echo"<tr><td align=\"center\" colspan=\"3\" bgcolor='#c1d001'>&nbsp;</td></tr>";  
       echo"</table>";
 ?>  
 <tr>
  <td align="center" colspan="2"><?foot();?></td>
 </tr>
</table>

mood
Publicité
Posté le 19-07-2004 à 16:01:36  profilanswer
 

n°801258
Arjuna
Aircraft Ident.: F-MBSD
Posté le 20-07-2004 à 21:08:45  profilanswer
 

1) select ID_USER from USERS where PG_PUB <> 'NULL'
C'est pas parce que ton champs PG_PUB n'est pas égal à 'NULL' qu'il contient forcément 'Y'. De plus, ca te ferais mal d'utilise la valeur null plutôt que 'NULL' ?
 
2) Quand on souhaite de l'aide sur une requête et qu'on veut des réponses, c'est mieu de faire l'effort minimum de ne poster que la/les requête/s qui chie/nt
 
3) where USERS.PG_PUB != 'NULL'
Comme le 1). De plus, utilise <> ou !=, mais faut choisir, mélanger les syntaxes possibles à tout bout de champs c'est ruiner la possibilité de faire de la maintenance par la suite.
 
4) select distinct ARTICLE.ID_USER,RAISON,PHOTO,PG_PUB from ARTICLE,USERS  
Préfixer avec le nom des tables quand tu fais une jointure, ça ne sert pas qu'à éviter de planter lors de l'exécution de la requête quand des champs sont présents dans plusieurs tables, ça sert aussi à une personne qui ne connaît pas ton modèle des données de comprendre la requête. Après ces 4 remarques un peu sèches, je voulais te filer un coup de main (pour pas passer pour un connard), mais là tu me coupes le souffle, ça me lourde de passer 30 minutes à réinventer ton modèle des données. Je répondrai plus tard si je m'emmerde, dans la soirée.

n°801463
gilles974
Posté le 21-07-2004 à 06:35:45  profilanswer
 

bonjour
non non ne t'inquiète pas "tu ne passera pas pour un connard" à mes yeux je pense que toutes remarques même un peux séches est bonne à prendre c'est comme ca que l'on avance.
 
1/ pour ta 1er remarque  
'NULL' lors de la creation de la table mysql à mi NULL d'habitude je laisse la champ vide (1er connerie de ma part)
2/ pour ta 2em remarque  
j'ai pense qu'il fallais mieux poster le bout de code entier. maintenant je sais qu'il faut mieux poster que la requette qui merde.
3/ pour ta 3em remarque  
j'ai pas fais gaffe........
4/ pour ta 4em remarque  
aurait il fallu que je joingne la structure des tables utilisées pour la requette?
 
salutation a+ gilles
 

n°802380
Arjuna
Aircraft Ident.: F-MBSD
Posté le 21-07-2004 à 20:45:23  profilanswer
 

4/ oui, ne serait-ce que la liste des champs utilisés par la requête.
 
Bon, vu que t'as pal mal pris mes remarques, je vais faire un effort ce soir, j'ai complètement zappé de repasser sur le forum hier soir, et vu que personne n'a eu la courtoisie de répondre à ton message, je ne vais pas te laisser dans la merde ;)
 

n°802410
Arjuna
Aircraft Ident.: F-MBSD
Posté le 21-07-2004 à 21:07:53  profilanswer
 

Dans un premier temps, ta requête ne renvoie pas du tout ce que tu cherches à faire.
 
Retourne les "nombre_utilisateur" premiers articles de ta table, sans te soucier si tu as tous tes utilisateurs... et donc des "doublons" pour certains utilisateurs.
 
Je te conseille de faire ça :
 


 <table border="0" summary="">  
 <tr>  
  <td align="center" colspan="2">&nbsp;</td>  
 </tr>  
 <?  
 session_destroy();  
 $query="select ID_USER from USERS where PG_PUB = 'Y' ORDER BY RAND() ";    
   $ok = fm($query);  
   $nbr = mysql_num_rows($ok);  
 
 $ligne=ceil($nbr/3);  
 for($i=0;$i<$ligne;$i++)  
      {  
      echo"<tr>";  
      for ($j=0;$j<3;$j++)  
          {  
list($ID_USER)=mysql_fetch_row($ok);
 
 $query = "select distinct ARTICLE.ID_USER,RAISON,PHOTO from ARTICLE ";  
 $query .= "where ARTICLE.ID_USER=$ID_USER ";  
 $query .= " ORDER BY RAND() LIMIT 1";  
 $pub = fm($query);  
 //echo "<br><center>[query : ".$query."]</center>";  
    list($RAISON,$PHOTO,$PG_PUB)=mysql_fetch_row($pub);  
        if($PHOTO != "" )  
      {  
    echo"<td align=\"center\" class=\"raison\"><br>";  
    echo"<a href=\"visu.php?action=galerie&expo=aff&page=Y&id_user=$ID_USER&pg_pub=$PG_PUB\">";  
    echo"<img src=\"tmp/$PHOTO\" border=\"0\" width=\"150\" ></a><br>$RAISON";  
    echo"</td>";  
    }  
    else  
      {  
      echo"<td align=\"center\">&nbsp;</td>";  
      }  
          }  
        $l=0;  
        $j=0;  
       echo"</tr>";  
       }  
 
   mysql_free_result($ok);  
   
 echo"<table border=\"0\" align=\"center\" width=\"500\" cellspacing=\"0\">";  
 echo"<tr>";  
 echo"<td align=\"center\" colspan=\"3\" bgcolor='#c1d001'><b>NOS COUPS DE COEUR </b></td>";  
 echo"</tr>";  
 
 
 
     echo"<tr><td align=\"center\" colspan=\"3\" bgcolor='#c1d001'>&nbsp;</td></tr>";    
       echo"</table>";  
 ?>  
 <tr>  
  <td align="center" colspan="2"><?foot();?></td>  
 </tr>  
</table>


 
Ceci dit, j'ai pour ainsi dire jamais fait de PHP, donc je ne suis dûr de rien niveau syntaxe. Par contre c'est l'algo ça suivre.
 
Avec un SGBD plus évolué tu aurais pu t'en sortir avec une seule requête contenant une sous-requête, mais là c'est pas possible.
Une autre solution t'aurais permit aussi de tout retourner avec une requête unique et un petit traîtement PHP, mais le caractère aléatoire du tri rends impossible ce type de fonctionnement.
Par conséquent, je ne vois pas d'autre solution que celle-ci, qui est bien minable (si t'as 100 000 utilisateurs, tu vas éxécuter 100 001 requête pour afficher la page, ce qui n'est pas terrible.


Message édité par Arjuna le 21-07-2004 à 21:08:25
n°802414
Arjuna
Aircraft Ident.: F-MBSD
Posté le 21-07-2004 à 21:08:59  profilanswer
 

PS: l'indentation est pourrie, je me suis contenté de faire des copier/coller de ton code, vu que je ne sais pas écrire une ligne de PHP :D

n°803926
gilles974
Posté le 23-07-2004 à 06:08:06  profilanswer
 

bonjour
 
excuse du retard....
merci pour ta reponse, je testesterais les modifs se week end, pour l'indendation a due merdé suite à mon copie colle, elle est plus clean sur l'original
 
merci je te tiens au courant des modifs  
 
gilles


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  prb de requette

 

Sujets relatifs
Requette SQLpourquoi cette requette ne fonctionne pas ??[oracle]
[SQL] requette avec un LIKE mais inverséListView & Requêtte
[ORACLE] Limiter le nombre de résultat d'une requetteParse d'une requette http
[Access / VB] Noob : comment lancer une requette parametree depuis VB?afficher le contenu d'un requette SQL dans 1 DataGrid ou autre ?
[PHP/Mysql] Probleme de requette - Help[PHP] j'arrive pas a faire une simple requette mysql ??
Plus de sujets relatifs à : prb de requette


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)