[SQL]J'arrive pas à trouver ma requête!

J'arrive pas à trouver ma requête! [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 22-01-2004 à 16:28:42    

Bon alors voilà, j'ai une table qui contient l'id de l'utilisateur, la date de l'insertion de la ligne, le message entré dans la base de données et je cherche désepérement la requête qui m'affichera le dernier message sauvegardé de tout les id utilisateurs ( une par id ).... mais je trouve pas.... ça me déprime ça m'est pas encor arrivé et là c le coup dur :( suis sûr que c rien à faire mais là je bloque. help ;)

Reply

Marsh Posté le 22-01-2004 à 16:28:42   

Reply

Marsh Posté le 22-01-2004 à 16:32:28    

peut etre quelque chose comme ca
 
SELECT  max(date) FROM users GROUP BY user_id


---------------
oui oui
Reply

Marsh Posté le 22-01-2004 à 16:41:45    

Effectivement là ça m'affiche la date max pour chaque utilisateur mais ce que je veux moi c pas la date mais le message ;) et j'y arrive po, merci quand meêm

Reply

Marsh Posté le 22-01-2004 à 16:45:05    

SELECT message, max(date) FROM table GROUP BY user_id ???


---------------
oui oui
Reply

Marsh Posté le 22-01-2004 à 16:46:15    

Bah non... il me file max date correctement mais le message c le premier qu'il trouve. normal d'ailleurs quand on y pense

Reply

Marsh Posté le 22-01-2004 à 16:46:24    

A tenter
 
SELECT * FROM table HAVING MAX(date) GROUP BY id

Reply

Marsh Posté le 22-01-2004 à 16:50:32    

g déjà essayé mais il faut une condition à HAVING genre HAVING MAX(date) > 0 mais bon là c pas le bon truc

Reply

Marsh Posté le 22-01-2004 à 16:52:56    

C'est un problème connu [:proy]  
 
Il existe un "truc" mais bon, ca vaut ce que ca vaut (les puristes vont m'écharper mais tant pis :D ) :
 
SELECT user_id, max(concat(date, message))
FROM table
GROUP BY user_id

Reply

Marsh Posté le 22-01-2004 à 16:56:03    

LOL! ça marche!!! merci !!!
m'en fou des principes... si ya pas d'autres solutions je prend!

Reply

Marsh Posté le 22-01-2004 à 17:04:23    

mrbebert > tu peux choisir ta mort : ecrasé sous un serveur, ou pendu à un câble réseau ? :D
 
ton truc marche, mais t'as pas intérêt à avoir trop de lignes dans la base hein ? ;)

Reply

Marsh Posté le 22-01-2004 à 17:04:23   

Reply

Marsh Posté le 22-01-2004 à 17:05:40    

on pourrait faire comment sinon ?  
 
une table intermédiaire ? ce serait lourd aussi ?


---------------
oui oui
Reply

Marsh Posté le 22-01-2004 à 17:06:15    

Un truc un peu plus propre (au moins la concaténation porte pas sur un gros volume de données ;))
 
Mais il faut que le SGBD supporte les requêtes imbriquées.
 


select datmod, utimod, lib1
from tbl
where datmod || utimod in (select max(datmod || utimod)
               from tbl
         where datmod <> ' '
         group by utimod)


Message édité par MagicBuzz le 22-01-2004 à 17:16:25
Reply

Marsh Posté le 22-01-2004 à 17:25:52    

non c une base de donnée mysql... mais je retiens

Reply

Marsh Posté le 22-01-2004 à 17:29:43    

c'est quoi les || ?


---------------
oui oui
Reply

Marsh Posté le 22-01-2004 à 17:32:56    

c 'OR'... ça marche aussi ?

Reply

Marsh Posté le 22-01-2004 à 18:12:05    

art_dupond a écrit :

c'est quoi les || ?


dans les vrais SGDB, c'est la concaténation.
dans MySQL, c'est 'OR' [:spamafote]

Reply

Marsh Posté le 22-01-2004 à 18:15:24    

Ah! bah g appris qqchose tien... :P

Reply

Marsh Posté le 06-02-2004 à 13:47:48    

Bonjour à tous,
 
Pour une requête sans concaténation essai qqchose comme ça.
 
SELECT A.USER_ID , A.MESSAGE  
FROM NOM_TABLE A,
(SELECT USER_ID as ID1 ,max(DT_MESSAGE) as DT_MAX  
FROM NOM_TABLE B
GROUP BY USER_ID)
where a.USER_ID = ID1
and A.DT_MESSAGE = DT_MAX  
 
ou créer une vue qui fait la requête  
SELECT USER_ID as ID1 ,max(DT_MESSAGE) as DT_MAX  
FROM NOM_TABLE B
GROUP BY USER_ID

Reply

Sujets relatifs:

Leave a Replay

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