[SQL/PHP]Comment faire ?

Comment faire ? [SQL/PHP] - Programmation

Marsh Posté le 24-01-2002 à 17:04:24    

Ca doit pas etre tres dur mais je trouve pas la logique...
J'ai une table comme ca :
toto|date1
tata|date1
toto|date2
titi|date3
toto|date4
 
et je veux que ca m'affiche un truc du style :
toto ; 3 ; (date1,date2,date4)
tata ; 1 ; (date1)
titi ; 1 ; (date3)
 
donc faire un select distinct sur les noms, avec le nombre de fois ou il apparait (count (*)) (si c'est trop  contraignant on laissse tomber les dates)...
 
si kkun veut bien me pondre le code php correspondant ca m'arrangerai (ce qui me bloque c'est de recuper le nombre de fois ou le nombre apparait (je n'ai pas de variables associée).
 
++


---------------
All we need is a soul revolution
Reply

Marsh Posté le 24-01-2002 à 17:04:24   

Reply

Marsh Posté le 24-01-2002 à 18:08:27    

En une seule requête, ce n'est pas possible.
Sinon, pour le count, tu fait :
 
select count(*) as nb_fois from ...
 
Et t'as une variable.
 
Sinon, tu utilise l'indice numérique dans le tableau des résultats 0, 1, 2... au lieu du nom de champ. Mais "as nb_fois" c'est mieux !


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 24-01-2002 à 18:24:34    

Du point de vue SQL c'est tout à fait possible, sans le détail des dates !!
 
SELECT NOM, COUNT(*) FROM MA_TABLE
GROUP BY NOM;
 
Pour ce qui est du PHP, désolé je ne peux pas t'aider :(

Reply

Marsh Posté le 24-01-2002 à 18:33:00    

C'est pas optimisé, mais ça répond à ton problème :
 
$query = "SELECT COUNT(id) as compt,nom FROM test3 GROUP BY nom";
$result = mysql_db_query ($cfgBase,$query) or die ("Erreur 1" );
 
 while($row = mysql_fetch_object($result))
 {
  $compteur[$row->nom] = $row->compt;
 }
 
$query2 = "SELECT id,nom,date FROM test3 ORDER BY nom";
$result2 = mysql_db_query ($cfgBase,$query2) or die ("Erreur 2" );
 
 $i = 0;
 while($row2 = mysql_fetch_object($result2))
 {
  $nom[$i] = $row2->nom;
   
  if($nom[$i]!=$nom[$i-1])
  {
   echo '<br>'.$nom[$i].' - '.$compteur[$nom[$i]].' - '.$row2->date;
  }
  else
  {
   echo ' - '.$row2->date;
  }
  $i++;
 }
 
Sans les dates :
 
$query = "SELECT COUNT(id) as compt,nom FROM test3 GROUP BY nom";
$result = mysql_db_query ($cfgBase,$query) or die ("Erreur 1" );
 
while($row = mysql_fetch_object($result))
{
 echo  $row->nom." - ".$row->compt."<br>";
}

Reply

Marsh Posté le 24-01-2002 à 19:51:42    

Merci a tous c'etait le AS qqchose qui me manquait.
 
FlyLM peux tu m'expliquer cette instruction stp :
$compteur[$row->nom] = $row->compt;

Reply

Marsh Posté le 24-01-2002 à 21:24:19    

C'est pour générer un tableau associatif (dont l'index est le nom) qui contient donc pour chaque nom, le nombre de fois qu'il apparait.
 
En gros c'est pour stocker le résultat de la première requête avant de faire la seconde.
 
Comme il dit, c'est pas optimisé !  :lol:  
 
Donc c'est à toi de comprendre ce que çà fait et de le refaire mieux.
 
Je te souhaite un bon exercice.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 24-01-2002 à 23:22:00    

houla ben c'est pô gagné  :cry:

Reply

Marsh Posté le 25-01-2002 à 12:08:53    

Et ca sert a quoi les points qui entourent les variables ??:
 echo '<br>'.$nom[$i].' - '.$compteur[$nom[$i]].' - '.$row2->date;


---------------
All we need is a soul revolution
Reply

Marsh Posté le 25-01-2002 à 12:12:42    

kayasax a écrit a écrit :

Et ca sert a quoi les points qui entourent les variables ??:
 echo '<br>'.$nom[$i].' - '.$compteur[$nom[$i]].' - '.$row2->date;  




 
->pour que PHP interprète les variables.

Reply

Marsh Posté le 25-01-2002 à 12:12:50    

Le Point, c'est l'opérateur de concaténation.
 
echo '<br>'.$nom[$i].' - '.$compteur[$nom[$i]].' - '.$row2->date;  
 
Mais si tu utilise les guillemets doubles, tu n'en as pas besoin:
echo "<br>$nom[$i]" - ".$compteur[$nom[$i]]." - ".$row2->date;  
 
Sauf pour les tableaux à plus d'une dimension "$compteur[$nom[$i]]", et peut-être aussi pour les objets, mais je suis pas certain "$row2->date".


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Sujets relatifs:

Leave a Replay

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