Comment faire ? [SQL/PHP] - Programmation
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 !
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
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>";
}
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;
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é !
Donc c'est à toi de comprendre ce que çà fait et de le refaire mieux.
Je te souhaite un bon exercice.
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;
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.
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".
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