ID (int autoincremanté)
Login (varchar)
Groupe (int)
Je voudrais pouvoir sortir quel est le dernier login de la liste ayant comme groupe une valeur précise, et ceci en 1 seule requette mysql et sans utiliser "de truc" php pour prendre seulement la derniere valeur.
J'espere de m'etre bien exprimé, merci d'avance
Esox
Publicité
Posté le 25-07-2004 à 17:11:08
gizmo
Posté le 25-07-2004 à 17:18:30
SELECT login FROM table
WHERE groupe = variable
ORDER BY id DESC
LIMIT 1
esox_ch
Posté le 25-07-2004 à 17:28:45
OOps je me suis effectivement mal exprimé ...mea culpa... Il faudrais que je puisse par exemple savoir quel est le dernier login pour groupe 1 et quel est le dernier login pour groupe 2 ... En gros afficher la liste du tout les dernier login pour chaque group ...
Profil supprimé
Posté le 25-07-2004 à 18:44:55
select max(id), login from maTable where and group="group1" ??
pas sur, et le flemme de verifier, me sert jamais des max
Message édité par Profil supprimé le 25-07-2004 à 18:45:27
esox_ch
Posté le 25-07-2004 à 18:45:35
Non comme ca tu obtiens le max ID et le 1er login de ta table ki satisfasse a la condition du groupe ... Parcontre j'imagine que c impossible de mettre le max() dans les where clauses?
Message édité par esox_ch le 25-07-2004 à 18:47:04
esox_ch
Posté le 25-07-2004 à 19:12:38
SELECT login FROM matable
GROUP BY 'group'
HAVING MAX( id )
Je n'ai reçu aucune erreur mais aucune donnée non plus ...
thecoin
Chasseur de chasseur de canard
Posté le 25-07-2004 à 21:14:47
Sous Oracle:
select id,login from matable where id in (select max(id) from matable group by group)
Message édité par thecoin le 25-07-2004 à 21:15:14
esox_ch
Posté le 25-07-2004 à 21:55:42
Je suis sous Mysql, mais en me disant ca tu m'a rappellé que j'avais vu une structure semblable (2 requettes embriquées) sur le site de mysql ... je v aller voir si je retrouve ... Merci bc en tt cas
gizmo
Posté le 25-07-2004 à 23:43:22
soit tu es avec MySQL 4.0+ et alors la requète de thecoin devrait fonctionner, soit tu peux essayer qqch comme ça
SELECT DISTINCT ON ("group" ) login
FROM table
ORDER BY "group",id DESC
esox_ch
Posté le 25-07-2004 à 23:44:30
Ok merci a vous 2, je vais voir tout ca , je vous redis demain merci en tout cas
Publicité
Posté le 25-07-2004 à 23:44:30
esox_ch
Posté le 26-07-2004 à 00:31:25
Juste ... j'ai trouver ca sur www.mysql.com a propos des subqueries de thecoin : Starting with MySQL 4.1 . Hors le 4.1 est encore en phase beta ==> pas chez mon hebergeur ... Je v essayer de voir comme tu dis toi gizmo
Tu ne pourras pas t'en sortir avec un HAVING. La confusion est souvent faire, mais le HAVING ne sert malheureusement pas à ça.
Tu utiliseras HAVING plutôt pour ce genre de choses :
Retrouver le nombre d'éléments de "n" qui sont présents plus de x fois dans la table :
select count(*) nbDev, cnvfac
from dev
group by cnvfac
having count(*) > 1
esox_ch
Posté le 26-07-2004 à 19:28:27
Bon le probleme reste appremment entier ... Mon hebergeur tourne encore sur la version 4.0+ de mysql (car la 4.1 est encore beta) et donc les subquery sont exclues , et le DISTINCT ON n'est pas reconnu par mysql .. Il connais seulement le DISTINCT .. Qqn a une idée de comment on peut arrenger ca?
Bon le probleme reste appremment entier ... Mon hebergeur tourne encore sur la version 4.0+ de mysql (car la 4.1 est encore beta) et donc les subquery sont exclues , et le DISTINCT ON n'est pas reconnu par mysql .. Il connais seulement le DISTINCT .. Qqn a une idée de comment on peut arrenger ca?
---------------
What if I were smiling and running into your arms? Would you see then what I see now?
esox_ch
Posté le 26-07-2004 à 20:27:19
Le probleme de 2 rekettes de suite est que, l'exemple que j'ai demandé est enfait une "simplification" du probleme qui m'occupe ... Faire + qu'une requette signifierais en faire beaucoup plus que 2 ... J'ai lu dans mysql qu'il y a presque toujour un moyen de convertir une requette avec subquery en 1 requette avec un JOIN, mais j'y arrive pas trop en ce moment .. Bon je v pas me laisser me decourrager quand meme, je v perseverer... je vous dirais si j'arive a qqch En tt cas merci a tous
Merci Jagstang , dans ma reponse précédente je parle justement de cet article (enfin je l'avais trouvé en anglais sur mysql.com)
jagstang
Pa Capona ಠ_ಠ
Posté le 26-07-2004 à 20:29:30
testé. ça fontctionne à merveille.
---------------
What if I were smiling and running into your arms? Would you see then what I see now?
esox_ch
Posté le 26-07-2004 à 20:46:58
Je suis entrain de me relire les pages sur JOIN, c'est vrai que j'ai jamais utilisé cette bete la ... Apperemment mon livre n'est pas aussi complet que je le croyais
jagstang
Pa Capona ಠ_ಠ
Posté le 26-07-2004 à 23:45:48
il existe des variantes de left join / inner join avec *= et =* plus agréables à utiliser
---------------
What if I were smiling and running into your arms? Would you see then what I see now?
esox_ch
Posté le 26-07-2004 à 23:47:51
Merci ... je vais voir tout ca sur mysql.com et si jamais c'est pas assez je chercherai des tuto ... En tout cas merci beaucoup
jagstang
Pa Capona ಠ_ಠ
Posté le 26-07-2004 à 23:56:04
je crois pas que MySQL supporte cela. mais Transact SQL
---------------
What if I were smiling and running into your arms? Would you see then what I see now?
esox_ch
Posté le 27-07-2004 à 00:14:30
Supporte quoi? Le *= ?
jagstang
Pa Capona ಠ_ಠ
Posté le 27-07-2004 à 00:15:36
oui
---------------
What if I were smiling and running into your arms? Would you see then what I see now?
dividee
Posté le 27-07-2004 à 02:09:51
ceci fonctionne, en tout cas en Access:
SELECT t1.login
FROM matable AS t1 LEFT OUTER JOIN matable AS t2
ON t1.group = t2.group AND t1.id < t2.id
WHERE t2.id IS NULL
Message édité par dividee le 27-07-2004 à 02:10:16