Page 1 sur 2

Probleme avec un DISTINCT

Posté : 09 juil. 2005, 18:01
par racegamers
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 ?

Posté : 09 juil. 2005, 20:47
par pjl
Pas de clef primaire dans ta table ?

Une date en varchar ?

Une autre date stockée sur 3 champs ?

Posté : 09 juil. 2005, 23:06
par Cyrano
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.

Posté : 10 juil. 2005, 18:06
par racegamers
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:

Posté : 10 juil. 2005, 18:09
par Cyrano
Fais voir la nouvelle structure de ta table.

Posté : 10 juil. 2005, 18:16
par racegamers
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;

Posté : 10 juil. 2005, 18:23
par Cyrano
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

Posté : 10 juil. 2005, 18:28
par racegamers
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

Posté : 10 juil. 2005, 18:49
par pjl
pourquoi un champ au format datetime ?
tu n'utilisais pas l'heure dans ta table précédente.

Posté : 10 juil. 2005, 19:01
par Cyrano
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

Posté : 10 juil. 2005, 19:39
par racegamers
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:

Posté : 10 juil. 2005, 19:43
par Cyrano
À 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 ?

Posté : 10 juil. 2005, 19:48
par racegamers
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 )

Posté : 10 juil. 2005, 20:47
par racegamers
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 .......

Posté : 10 juil. 2005, 21:10
par racegamers
et sinon, on peut pas faire un WHERE sur la manche ?

WHERE MAX manche ??!!? :?