[SQL] Requete sql

Fermé
jonathan - 4 mai 2007 à 15:21
 angel - 9 mai 2007 à 14:17
Bonjour,
Je planche sur une requete SQL...
J'ai une base avec 2 champs (id / numero)
Voila les occurences :
1/ 2
2/ 1
3/ 1
4/ 3
5/ 3
6/ 3

J'aimerai faire une requête qui me sorte en résultat un groupement de chaque chiffre avec son nombre d'occurence correspondante :
2 : 1 occurence
1 : 2 occurence
3 : 3 occurence
Puis les grouper par nombre d'occurence DESC
Ce qui doit donner a la fin :
3 : 3occ
1 : 2 occ
2 : 1 occ
Voilà, si qq'un pourrait m'aider a faire en 1 requete ca serait magnifique.

ps: voici ma requete de "base"
SELECT * FROM table GROUP BY numero ORDER BY (nombre d'occurence) DESC;
A voir également:

4 réponses

Xandler Messages postés 38 Date d'inscription mardi 10 avril 2007 Statut Membre Dernière intervention 10 mai 2007
4 mai 2007 à 16:08
Salut,
Essaie ça :

select num,count(numero) from nomTable group by numero order by count(numero) desc;

je pense ça devrait marcher !
@+
0
Oki je vais essayé merci

Par contre comment je fais a recuperer la valeur trouvé ?

pour le numero je fais :

$sql="select num,count(numero) from table group by numero order by count(numero) desc";
$req=mysql($database, $sql);
$nb = mysql_num_rows($req);
$i=0;

while ($i<$nb)
{
$numero = mysql_result($req, $i, "numero");
$nb_occurence = ?????????

echo" $numero : $nb_occurence";

$i++;
}

Merci à toi
@ tte
0
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
4 mai 2007 à 17:03
$sql="select num,count(numero) as total from table group by numero order by count(numero) desc";
$req=mysql($database, $sql);
$nb = mysql_num_rows($req);
$i=0;

while ($i<$nb)
{
$numero = mysql_result($req, $i, "numero");
$nb_occurence = mysql_result($req,$i,"total");

echo" $numero : $nb_occurence";

$i++;
} 


0
Merci ca marche nickel

Par contre j'avais simplifié ma demande en croyant qu'avec la reponse je pourrai trouver la suite tout seul mais ce n'est pas le cas... :(

En faite, dans ma table y'a d'autres champs, entre autre le champs status (qui a pour valeur soit 0 ; 1 ou 2) et je voudrai savoir combien il y a d'occurence avec un status 1 et combien d'occurence avec status 2 mais ne pas prendre en compte ceux a status 0.

ma table : (id / numero / status)

1/ 2 / 0
2/ 1 / 0
3/ 1 / 2
4/ 3 / 1
5/ 3 / 1
6/ 3 / 0

Je voudrai comme resultat :
numero | nombre a status 1 | nombre a status 2
3 2 0
1 0 1


Voici ma requete


$sql= "SELECT idproduit, COUNT(idproduit) as total FROM caddie WHERE status IN (1, 2) AND date LIKE '2007-04-%' GROUP BY idproduit ";
$req=mysql($database, $sql);
$nb=mysql_num_rows($req);


$i=0;



while ($i<$nb)
{
$nom = mysql_result($req, $i, "idproduit");
$nbre = mysql_result($req, $i, "total");

echo"id : $nom , nombre : $nbre<br>";

$i++;
}

Elle m'affiche
3 : 2
1 : 1

je sais que pour le nombre 3 y'a 2 occurence qui ont soit status 1 ou 2 mais je peux pas savoir combien sont a status 1 et combien a status 2.

J'espere que je me suis bien exprimé.

En tout cas MERCI a vous :p
0
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857 > angel
9 mai 2007 à 12:39
Bonjour,

Je te conseil de faire des requetes séparées dans ta boucle while pour chacun des nombres connus.

Je ne sais pas d'ou sort ta variable '$nombre' mais bon...

Donc voilà a peu pres l'idée :

$sql= "SELECT DISCTINCT numero FROM caddie WHERE status = '1' AND date LIKE '2007-04-%' GROUP BY idproduit ";
$req=mysql($database, $sql);
$nb=mysql_num_rows($req);


$i=0;



while ($i<$nb)
{
$numero= mysql_result($req, $i, "numero ");

// --- Sous requetes pour chaque chacun des numéros afin de connaitre séparement le nombre de status 1 puis 2 pour le numéro courant :
$rqt1 = "SELECT COUNT(status) as total1 FROM caddie WHERE status = '1'  AND numero = '".$numero."' ";
$rqt2 = "SELECT COUNT(status) as total2 FROM caddie WHERE status = '2'  AND numero = '".$numero."' ";

$request1=mysql($database, $rqt1);
$request2=mysql($database, $rqt2);

$line1 = @mysql_fetch_assoc($request1);
$line2 = @mysql_fetch_assoc($request2);

echo $numero." | ".$line1["total1"]." | ".$line2["total2"]."<BR>";


$i++;
} 



Voilà l'idée est là. La premiere requete te permet de sélectionner l'ensemble des numéros.

Les deux requetes présente dans la boucle te permettent de prendre les totaux de status à 1 puis 2 pour chaque numéro récupéré.

Il te reste à adapter ça en fonction de tes besoins.
Je ne suis pas très doué pour mettre tout cela sous la forme d'une seule et même requête donc c'est un solution de secours en attendant que quelqun qui s'y connait mieux en SQL passe par là :)

0
Salut Kij_82
Merci pour ta réponse
J'ai effectivement utilisé cette solution de "secours" en attendant.
Le probleme est que ma premiere requête trouve environ 1000 résultat dans ma base (hé oui c une grosse base :p)
Dans cette solution mon serveur doit executer 2001 requêtes, et apparement il apprecie pas trop... (moi non plus d'ailleurs :D)

En tout cas merci de t'etre penché sur le probleme.
0