Page 1 sur 2
creer un top 10
Posté : 25 janv. 2008, 15:13
par pingoo67
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
Posté : 25 janv. 2008, 16:10
par Berzemus
salut,
A ta question "est-ce que c'est possible", je réponds " tout à fait"

.
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.
Posté : 25 janv. 2008, 16:36
par pingoo67
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
Posté : 25 janv. 2008, 19:21
par Berzemus
Si ça cause des erreurs, faut pas hésiter à les mettre
ç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
Posté : 25 janv. 2008, 19:58
par zeus
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.
Posté : 28 janv. 2008, 09:01
par pingoo67
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
Posté : 28 janv. 2008, 09:23
par zeus
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) ?
Posté : 28 janv. 2008, 09:37
par pingoo67
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', '', '');
Posté : 28 janv. 2008, 09:48
par zeus
Tu n'aurais pas un jeu de données un peu plus complet ? Parce que faire un top 10 sur une seule ligne

Posté : 28 janv. 2008, 10:12
par pingoo67
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');
Posté : 28 janv. 2008, 11:28
par Berzemus
Oui ben c'est bien ce qui me semblait, la requête fonctionne comme un charme
(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 ?
Posté : 28 janv. 2008, 11:29
par zeus
PS : désolé de t'avoir redemandé la structure, j'ai raté le post dans lequel tu la mettait au départ

Posté : 28 janv. 2008, 11:37
par pingoo67
$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 / >";
}
Posté : 28 janv. 2008, 12:36
par Berzemus
et la, en tant que tel, ton code il fonctionne ?
Posté : 28 janv. 2008, 12:49
par pingoo67
oui mais il me classe le tout simplement par ordre de reference et non par la pièce la plus courante à la moin courante