Probleme avec un DISTINCT

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Probleme avec un DISTINCT

par racegamers » 11 juil. 2005, 06:24

bon, j'ai contourner le probleme en mettant un champ valid
ensuite, je fais un where valid='oui' pour n'afficher que les dernieres manches

Merci beaucoup de vos aides cyrano et pjl :wink:

par Cyrano » 10 juil. 2005, 22:07

Non, ça fonctionnera pas. Par contre pour le faire afficher, essaye en mettant un alias sur le MAX (MAX(jeux) as maxjeux) de ta requête et fais afficher l'alias (maxjeux) au lieu du nom du champ (jeux). Mais c'est quand même curieux que ça ne s'affiche pas de toutes façon.

par racegamers » 10 juil. 2005, 21:10

et sinon, on peut pas faire un WHERE sur la manche ?

WHERE MAX manche ??!!? :?

par racegamers » 10 juil. 2005, 20:47

bon, j'ai fait ca :
SELECT  DISTINCT(jeux), MAX(manche) FROM a_manches_champ GROUP BY jeux
donc, ca me donne :

Code : Tout sélectionner

jeux MAX(manche) Forza 12 GT4 10 NFSU2 16 TMS 3 Tocard2 18
par contre, quand je remet cette requette sur ma page php, ca ne m'affiche que le nom du jeux et la manche ne s'affiche pas .......

par racegamers » 10 juil. 2005, 19:48

non, il y a le numero de la manche

je mets mes champs
INSERT INTO `a_manches_champ` VALUES (1, 'Tocard2', 17, '2005', 'Pacific American', 'Road America', 'Mitsubishi 3000GT', '', '28/6', '0000-00-00 00:00:00', '');
INSERT INTO `a_manches_champ` VALUES (2, 'GT4', 10, '2005', '', 'La Sarthe 1', 'Eagle Talon Esi 97', '', '2/7', '0000-00-00 00:00:00', '');
INSERT INTO `a_manches_champ` VALUES (3, 'Forza', 12, '2005', '', 'Silverstone (short)', '2002 Honda Mugen Integra Type-R (Japan)', 'C', '5/7', '0000-00-00 00:00:00', 'Vous pouvez prendre la Integra de 2000 ou celle de 2002');
INSERT INTO `a_manches_champ` VALUES (4, 'NFSU2', 16, '2005', 'Course', 'Switchback', '', '', '4/7', '0000-00-00 00:00:00', 'Test en cours');
INSERT INTO `a_manches_champ` VALUES (5, 'Tocard2', 18, '2005', 'EuroRally', 'Euro Rally SS3', 'Mitsubishi Evo VII Rally Car', '', '09/07', '0000-00-00 00:00:00', '');
  
ce que je voudrais, c'est afficher tous les jeux, mais pour chaque jeu, la manche qui a le plus gros chiffre (manche)

donc, pour ces ex, je les voudrais tous sauf le 1er (car il y a 2 fois tocard2 dont l'un qui a la manche 17 et l'autre 18 )

par Cyrano » 10 juil. 2005, 19:43

À part l'id, qu'est-ce qui distingue la dernière manche d'une autre au fond ? Est-ce que toutes les manches par exemple commencent la même date ou se terminent la même date ?

par racegamers » 10 juil. 2005, 19:39

Cyrano :arrow: ca me fait pareil :cry:

pjl :arrow: j'en profite, car j'en ai besoin (de la date) pour un time()< mktime ou là, j'ai besoin aussi de l'heure :wink:

par Cyrano » 10 juil. 2005, 19:01

Curieux comme erreur... bon, essaye en enlevant l'alias :

Code : Tout sélectionner

SELECT MAX(id), DISTINCT(manche) FROM a_manches_champ GROUP BY id

par pjl » 10 juil. 2005, 18:49

pourquoi un champ au format datetime ?
tu n'utilisais pas l'heure dans ta table précédente.

par racegamers » 10 juil. 2005, 18:28

J'ai essayer sous phpmyadmin, mais ca me fait une erreur :
MySQL a répondu:Documentation
#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'DISTINCT(manche)
FROM a_manches_champ
GROUP BY id_manche

par Cyrano » 10 juil. 2005, 18:23

Essaye avec un truc comme ça : teste la directement dans phpMyAdmin, quand le requête sera au point, tu l'intègreras

Code : Tout sélectionner

SELECT MAX(id) as id_manche, DISTINCT(manche) FROM a_manches_champ GROUP BY id_manche

par racegamers » 10 juil. 2005, 18:16

CREATE TABLE `a_manches_champ` (
  `id` int(3) NOT NULL default '0',
  `jeux` varchar(20) NOT NULL default '',
  `manche` tinyint(2) NOT NULL default '0',
  `annee` varchar(4) NOT NULL default '0000',
  `type` varchar(20) NOT NULL default '',
  `circuit` varchar(30) NOT NULL default '',
  `auto` varchar(40) NOT NULL default '',
  `classe` char(1) NOT NULL default '',
  `debut` varchar(5) NOT NULL default '',
  `fin` datetime NOT NULL default '0000-00-00 00:00:00',
  `commentaire` varchar(100) NOT NULL default '',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM;

par Cyrano » 10 juil. 2005, 18:09

Fais voir la nouvelle structure de ta table.

par racegamers » 10 juil. 2005, 18:06

Bon, j'ai pris bonne note de vos remarques

J'ai donc changé mes dates
J'ai creer un champ id avec cle primaire

Mais j'arrive tjs pas a faire ma requette pour afficher la derniere manche de chaque jeu :cry:
Pas doué moi :oops: :cry:

par Cyrano » 09 juil. 2005, 23:06

Si tu utilises une clause DISTINCT et plusieurs champs dans ta requête, il te faut ajouter une clause GROUP BY su les autres champs àla fin de ta requête.

Mais le DISTINCT n'est pas la solution.

Premièrement comme te l'a mentionné pjl, il te manque une clé primaitre à ta table, de préférence de type INT en auto_increment.

Ensuite, les dates sur un seul champ de type DATE on non VARCHAR. Le type YEAR(4) n'existe pas pour autant que je sache non plus.

Restructure ta table et ensuite, pour obtenir la dernière manche, ce sera infiniment plus facile avec une idée sur laquelle tu étais partie : MAX(champ) sur ta clé primaire pour avoir la dernière enregistrée par exemple.