Probleme avec un DISTINCT

Eléphanteau du PHP | 34 Messages

09 juil. 2005, 18:01

Bjs a tous :wink:

Voici ma table :
CREATE TABLE `a_manches_champ` (
  `jeux` varchar(20) NOT NULL default '',
  `manche` tinyint(2) NOT NULL default '0',
  `annee` year(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 '',
  `date_debut` varchar(5) NOT NULL default '',
  `d_jour` tinyint(2) NOT NULL default '0',
  `d_mois` tinyint(2) NOT NULL default '0',
  `d_annee` year(4) NOT NULL default '0000',
  `commentaire` varchar(100) NOT NULL default ''
) TYPE=MyISAM;
Je voudrais afficher ensuite seulement la derniere manche de chaque jeu classé par date
SELECT DISTINCT jeux, manche, d_jour, d_mois FROM a_manches_champ order BY d_mois DESC
Probleme, ca m'affiche toujours les 2 manches d'un jeu, au lieu d'avoir seulement la derniere manche :?

J'ai essayé avec un
SELECT DISTINCT(jeux), MAX(manche), d_jour, d_mois FROM a_manches_champ order BY d_mois DESC
que j'ai vu en recherchant sur ce forum, mais là, pire, plus rien ne s'affiche :cry:

QQ a une solution ?
http://www.racegamers.com
Championnat offline sur tous les jeux de sport mecanique

ViPHP
pjl
ViPHP | 2119 Messages

09 juil. 2005, 20:47

Pas de clef primaire dans ta table ?

Une date en varchar ?

Une autre date stockée sur 3 champs ?

Mammouth du PHP | 19672 Messages

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 34 Messages

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:
http://www.racegamers.com
Championnat offline sur tous les jeux de sport mecanique

Mammouth du PHP | 19672 Messages

10 juil. 2005, 18:09

Fais voir la nouvelle structure de ta table.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 34 Messages

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;
http://www.racegamers.com
Championnat offline sur tous les jeux de sport mecanique

Mammouth du PHP | 19672 Messages

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
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 34 Messages

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
http://www.racegamers.com
Championnat offline sur tous les jeux de sport mecanique

ViPHP
pjl
ViPHP | 2119 Messages

10 juil. 2005, 18:49

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

Mammouth du PHP | 19672 Messages

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
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 34 Messages

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:
http://www.racegamers.com
Championnat offline sur tous les jeux de sport mecanique

Mammouth du PHP | 19672 Messages

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 ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 34 Messages

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 )
http://www.racegamers.com
Championnat offline sur tous les jeux de sport mecanique

Eléphanteau du PHP | 34 Messages

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 .......
http://www.racegamers.com
Championnat offline sur tous les jeux de sport mecanique

Eléphanteau du PHP | 34 Messages

10 juil. 2005, 21:10

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

WHERE MAX manche ??!!? :?
http://www.racegamers.com
Championnat offline sur tous les jeux de sport mecanique