Retourner le dernier element d'une table

Retourner le dernier element d'une table - SQL/NoSQL - Programmation

Marsh Posté le 25-07-2004 à 17:11:08    

Bonjour ,  
 
j'ai une table contenant 3 champs :  
 
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

Reply

Marsh Posté le 25-07-2004 à 17:11:08   

Reply

Marsh Posté le 25-07-2004 à 17:18:30    

SELECT login FROM table
WHERE groupe = variable
ORDER BY id DESC
LIMIT 1

Reply

Marsh 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 ...

Reply

Marsh 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 [:itm]


Message édité par Profil supprimé le 25-07-2004 à 18:45:27
Reply

Marsh 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
Reply

Marsh 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 ...  :??:  :??:  :??:

Reply

Marsh 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
Reply

Marsh 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

Reply

Marsh 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

Reply

Marsh Posté le 25-07-2004 à 23:44:30    

Ok merci a vous 2, je vais voir tout ca , je vous redis demain :D merci en tout cas

Reply

Marsh Posté le 25-07-2004 à 23:44:30   

Reply

Marsh 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

Reply

Marsh Posté le 26-07-2004 à 01:26:17    

esox_ch a écrit :

SELECT login  
FROM matable
GROUP BY 'group'
HAVING MAX( id )
 
Je n'ai reçu aucune erreur mais aucune donnée non plus ...  :??:  :??:  :??:

c'est quoi 'group' ?  
 
je crois plutot que c'est group by login,group.


Message édité par fabien le 26-07-2004 à 01:27:13

---------------
Découvre le HFRcoin ✈ - smilies
Reply

Marsh Posté le 26-07-2004 à 09:54:02    

Fabien a écrit :

c'est quoi 'group' ?  
 
je crois plutot que c'est group by login,group.


 
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

Reply

Marsh 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?

Reply

Marsh Posté le 26-07-2004 à 20:14:35    

Deux requêtes de suite... Guère d'autre choix.

Reply

Marsh Posté le 26-07-2004 à 20:26:23    

esox_ch a écrit :

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?


 
ça peut t'aider...
 
http://www.nexen.net/docs/mysql/an [...] ueries.php


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh 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

Reply

Marsh Posté le 26-07-2004 à 20:28:10    


 
Merci Jagstang , dans ma reponse précédente je parle justement de cet article (enfin je l'avais trouvé en anglais sur mysql.com)

Reply

Marsh 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?  
Reply

Marsh 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 :p

Reply

Marsh 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?  
Reply

Marsh 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

Reply

Marsh 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?  
Reply

Marsh Posté le 27-07-2004 à 00:14:30    

Supporte quoi? Le *= ?

Reply

Marsh 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?  
Reply

Marsh 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
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed