creer un top 10

pingoo67
Invité n'ayant pas de compte PHPfrance

25 janv. 2008, 15:13

Bonjour je cherche le moyen de creer un top 10 sachant que j'ai une base sql comprenant des references, les references sont implémentés plusieurs fois et n'ajoute pas 1 sur un compteur. Il y a donc plusieurs reference identique dans la table, je ne trouve pas de requete pouvent selectionner les 10 references les plus presente dans la table??

Je me demande si c'est possible ou s'il faut que je creer un compteur par reference
Merci

ViPHP
ViPHP | 4039 Messages

25 janv. 2008, 16:10

salut,

A ta question "est-ce que c'est possible", je réponds " tout à fait" :wink: .

Mais, n'étant malheureusement pas capable d'extrapoler la structure de ta DB d'après le peu que tu nous en dit, je pourrais pas te dire comment..

Un truc du genre (si je ne me trompe):

Code : Tout sélectionner

SELECT reference,count(*) as nombre FROM table GROUP BY reference
Pour avoir le nombre de fois qu'une même reference revient.

Sujet à déplacer dans la partie SQL aussi, en même temps.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

pingoo67
Invité n'ayant pas de compte PHPfrance

25 janv. 2008, 16:36

Merci pour ton aide, mais cela ne fonctionne pas correctement, voila mon code :

Code : Tout sélectionner

<?php $requete = "SELECT ref,count(*) as nombre, designation FROM pieces GROUP BY ref limit 10, 10 "; $select=mysql_query($requete); while($row= mysql_fetch_array($select)) { echo $row['designation']."<br / >"; } ?>
Pour info voici la structure de ma table :

Code : Tout sélectionner

CREATE TABLE `pieces` ( `id` mediumint(9) NOT NULL auto_increment, `ref` varchar(255) NOT NULL default '', `designation` varchar(255) NOT NULL default '', `entree` varchar(255) NOT NULL default '', `statut` varchar(255) NOT NULL default '', `marque` varchar(255) NOT NULL default '', KEY `id` (`id`) ) TYPE=MyISAM AUTO_INCREMENT=37 ;
Peut tu me dire pourquoi cela ne me donne pas le top 10 ?
Merci pour ton aide

ViPHP
ViPHP | 4039 Messages

25 janv. 2008, 19:21

Si ça cause des erreurs, faut pas hésiter à les mettre :wink:

ça ne fonctionne pas puisque les fonctions d'agrégation (group by dans ce cas) sont incompatibles avec limit et order by (histoire de logique SQL).

Mais ça n'interdit pas d'utiliser un sous-tableau:

Code : Tout sélectionner

SELECT ref,nombre,designation FROM (SELECT ref,count(*) as nombre, designation FROM pieces GROUP BY ref,designation) as a ORDER BY nombre DESC LIMIT 10
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

25 janv. 2008, 19:58

Modération :
Afin d'obtenir plus de réponses, le sujet est déplacé dans le forum "SQL & Bases de données".

Merci de prendre le temps de lire les règlements
ainsi que l'intitulé de chaque forum avant de poster un nouveau sujet.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

pingoo67
Invité n'ayant pas de compte PHPfrance

28 janv. 2008, 09:01

Lorsque j'essaye :

Code : Tout sélectionner

SELECT ref,nombre,designation FROM (SELECT ref,count(*) as nombre, designation FROM pieces GROUP BY ref,designation) as a ORDER BY nombre DESC LIMIT 10
J'ai l'erreur suivante :

Code : Tout sélectionner

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp1-7\www\index.php on line 118
J'ai cherché une requete tout le week-end sans resultat..pouvez-vous m'aider SVP

MERCI

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

28 janv. 2008, 09:23

Est-ce que tu peux nous donner la structure de tes tables (sous la forme d'un export CREATE TABLE) et un échantillon de données (sous la forme export INSERT INTO) ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

pingoo67
Invité n'ayant pas de compte PHPfrance

28 janv. 2008, 09:37

Voila :

Code : Tout sélectionner

CREATE TABLE `pieces` ( `id` mediumint(9) NOT NULL auto_increment, `ref` varchar(255) NOT NULL default '', `designation` varchar(255) NOT NULL default '', `entree` varchar(255) NOT NULL default '', `statut` varchar(255) NOT NULL default '', `marque` varchar(255) NOT NULL default '', KEY `id` (`id`) ) TYPE=MyISAM AUTO_INCREMENT=42 ; # # Contenu de la table `pieces` # INSERT INTO `pieces` VALUES (4, '40013800003', 'SOUPAPE', '24/01/2008', '', '');

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

28 janv. 2008, 09:48

Tu n'aurais pas un jeu de données un peu plus complet ? Parce que faire un top 10 sur une seule ligne :lol:
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

pingoo67
Invité n'ayant pas de compte PHPfrance

28 janv. 2008, 10:12

Code : Tout sélectionner

INSERT INTO `pieces` VALUES (4, '40013800003', 'SOUPAPE', '24/01/2008', '', ''); INSERT INTO `pieces` VALUES (5, '22090000003', 'Poste VDO', '24/01/2008', 'refuse', ''); INSERT INTO `pieces` VALUES (6, '21030000002', 'KLIMACENTER KR', '24/01/2008', 'retour_mag', ''); INSERT INTO `pieces` VALUES (7, '22090000015', 'CORDON MICRO', '24/01/2008', 'interne', ''); INSERT INTO `pieces` VALUES (8, '22091500066', 'MICRO BLAUPUNKT', '24/01/2008', 'interne', ''); INSERT INTO `pieces` VALUES (9, '22025200003', 'MOTEUR EG IC', '24/01/2008', 'accepte', ''); INSERT INTO `pieces` VALUES (10, '41010000163', 'FAISCEAU SPECIFIQUE ISO', '24/01/2008', 'retour_mag', ''); INSERT INTO `pieces` VALUES (11, '22090000126', 'ANTENNE N-M TEMSA', '24/01/2008', 'retour_mag', ''); INSERT INTO `pieces` VALUES (12, '22090000133', 'MONITEUR PRESTIGE 12V', '24/01/2008', 'interne', ''); INSERT INTO `pieces` VALUES (13, '21025200107', 'RADIATEUR CHAUF AV SORTIE DROIT', '24/01/2008', 'accepte', ''); INSERT INTO `pieces` VALUES (14, '20115200128', 'VERRIN VOLET DE SOUTE', '24/01/2008', 'accepte', ''); INSERT INTO `pieces` VALUES (15, '22015200107', 'BP CUVETTE TOILETTE SAF/OPAL', '24/01/2008', 'accepte', ''); INSERT INTO `pieces` VALUES (16, '41015202212', 'CLIP D26', '24/01/2008', 'accepte', ''); INSERT INTO `pieces` VALUES (17, 'TY263188Y', 'CABLE CDE VITESSE', '25/01/2008', 'accepte', ''); INSERT INTO `pieces` VALUES (18, '41010000006', 'NECESSAIRE REPARATION CYL.PTE', '25/01/2008', 'accepte', ''); INSERT INTO `pieces` VALUES (19, '40033300001', 'ROBINET COMMANDE', '25/01/2008', 'accepte', ''); INSERT INTO `pieces` VALUES (20, '41010000006', 'NECESSAIRE REPARATION CYL.PTE', '25/01/2008', 'accepte', ''); INSERT INTO `pieces` VALUES (21, '20095200026', 'ACCOUDOIR D SAF HD', '25/01/2008', 'accepte', ''); INSERT INTO `pieces` VALUES (22, '51010000037', 'CONTACTEUR STOP SAF', '25/01/2008', 'accepte', ''); INSERT INTO `pieces` VALUES (23, '64159-10010-T2Y', 'ALLUME CIGARE', '25/01/2008', 'accepte', ''); INSERT INTO `pieces` VALUES (24, '51062700008', 'RELAIS INTERMITTENCE EG', '25/01/2008', 'accepte', ''); INSERT INTO `pieces` VALUES (25, '51060000009', 'RELAIS TYCO AVEC RESISTANCE', '25/01/2008', 'accepte', ''); INSERT INTO `pieces` VALUES (26, 'TY260191', 'ECROU', '25/01/2008', 'accepte', ''); INSERT INTO `pieces` VALUES (27, 'TY260190Y', 'VIS', '25/01/2008', 'accepte', ''); INSERT INTO `pieces` VALUES (28, '41010000006', 'NECESSAIRE REPARATION CYL.PTE', '25/01/2008', 'accepte', ''); INSERT INTO `pieces` VALUES (29, '41013801708', 'CAGE ROTULE', '25/01/2008', 'accepte', ''); INSERT INTO `pieces` VALUES (30, '21022300093', 'SONDE DE TEMPERAT EBERSP', '25/01/2008', 'accepte', ''); INSERT INTO `pieces` VALUES (31, '30103600045', 'VASE D EXPANSION', '25/01/2008', 'accepte', ''); INSERT INTO `pieces` VALUES (32, '51062700008', 'RELAIS INTERMITTENCE EG', '25/01/2008', 'accepte', 'temsa'); INSERT INTO `pieces` VALUES (33, '51013600261', 'CONTACTEUR DE DEMARRAGE', '25/01/2008', 'accepte', 'man'); INSERT INTO `pieces` VALUES (34, '20013600007', 'BARRILET ANTIVOL', '25/01/2008', 'accepte', 'man'); INSERT INTO `pieces` VALUES (35, '41013600616', 'VIS AUTO CASSANTE CONTACTEUR', '25/01/2008', 'accepte', 'man'); INSERT INTO `pieces` VALUES (36, '41013600616', 'VIS AUTO CASSANTE CONTACTEUR', '25/01/2008', 'accepte', 'man'); INSERT INTO `pieces` VALUES (37, '41010000006', 'NECESSAIRE REPARATION CYL.PTE', '25/01/2008', 'accepte', 'temsa'); INSERT INTO `pieces` VALUES (38, '41010000006', 'NECESSAIRE REPARATION CYL.PTE', '25/01/2008', 'accepte', 'temsa'); INSERT INTO `pieces` VALUES (39, '20025200025', 'PROFILE', '28/01/2008', 'accepte', 'temsa'); INSERT INTO `pieces` VALUES (40, '51065200072', 'RESISTANCE POUR UNITE DEGIVR', '28/01/2008', 'accepte', 'temsa'); INSERT INTO `pieces` VALUES (41, '41010000006', 'NECESSAIRE REPARATION CYL.PTE', '28/01/2008', 'accepte', 'temsa');

ViPHP
ViPHP | 4039 Messages

28 janv. 2008, 11:28

Oui ben c'est bien ce qui me semblait, la requête fonctionne comme un charme :ordi:
(testé sous phpmyadmin)

c'est dans ton script qu'il doit y avoir un souci. Tu peux nous mettre la partie de ton code qui traite la requête ?
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

28 janv. 2008, 11:29

PS : désolé de t'avoir redemandé la structure, j'ai raté le post dans lequel tu la mettait au départ :oops:
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

pingoo67
Invité n'ayant pas de compte PHPfrance

28 janv. 2008, 11:37

 $requete = "SELECT ref,count(*) as nombre, designation FROM pieces GROUP BY ref limit 10 ";
				$select=mysql_query($requete);
				while($row= mysql_fetch_array($select)) { 
				echo $row['designation']."<br / >";
				}

ViPHP
ViPHP | 4039 Messages

28 janv. 2008, 12:36

et la, en tant que tel, ton code il fonctionne ?
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

pingoo67
Invité n'ayant pas de compte PHPfrance

28 janv. 2008, 12:49

oui mais il me classe le tout simplement par ordre de reference et non par la pièce la plus courante à la moin courante