[RESOLU]Afficher date la plus récente et heure en conséquence

Afficher date la plus récente et heure en conséquence [RESOLU] - SQL/NoSQL - Programmation

Marsh Posté le 27-09-2006 à 21:45:50    

Bonjour, j'essais d'expliquer correctement :  
 
2 tables dans ma base SQL :
- messages : id_message, date, heure, posteur, sujet du message
- reponses : id_reponse, id_message, date, heure de la réponse
 
Je veux :
- afficher la liste des messages existants (juste le posteur et le sujet)
- afficher en face de chaque login+sujet : la date et l'heure de la dernière réponse postée.
 
Le problème :
- mes champs date ne sont pas sous la forme DATE dans MySQL (sont enregistrés en jj/mm/aaaa)
 
 
Voilà ce que ça donne, pour vous aider à visualiser :
http://michalatore.free.fr/pb-php.JPG


Message édité par elliotdoe le 28-09-2006 à 14:53:46
Reply

Marsh Posté le 27-09-2006 à 21:45:50   

Reply

Marsh Posté le 27-09-2006 à 21:53:56    

Niveau requête, j'en suis à ça :
 

Citation :


select messages.id as id, messages.login as login, messages.sujet as sujet, reponses.id_reponse, reponses.id_message,
max(reponses.date) as date, max(reponses.heure) as heure
from reponses inner join messages
where messages.id = reponses.id_message
group by  reponses.id_message
order by reponses.id_reponse DESC;


 
En classant par l'id_reponse ça devrait marcher puisque l'id_reponse le plus grand est le plus récent... sauf qu'après un GROUP BY, le ORDER BY est pas prit en compte...


Message édité par elliotdoe le 27-09-2006 à 22:16:48
Reply

Marsh Posté le 27-09-2006 à 22:18:43    

Pourquoi mon order by n'est pas pris en compte après le group by ?
Il est obligatoire, il me permet de ne pas afficher tous les champs de réponse, mais juste le plus récent.

Reply

Marsh Posté le 27-09-2006 à 22:27:24    

Bon... je pars sur quelque chose de faux je pense.
Comment faire pour sélectionner : posteur, sujet, date du dernier message, heure du dernier message, sachant que c'est sur deux tables différentes...

Reply

Marsh Posté le 27-09-2006 à 22:40:14    

Celà ne serait il pas une bonne idée d'indiquer quel id_message tu veux obtenir pour chaque discution? Je paris que tu aurais voulut l'id_message le plus grand, mais vu que tu ne le précises pas, mysql en prend un au hasard parmis tous ceux qui sont possible.
Ce n'est pas étonant que tu n'obtiennes pas le tri voulut.

Reply

Marsh Posté le 27-09-2006 à 22:42:56    

J'ai 2 id message :
- table messages : id (auto-incrément)
- table reponses : id_message (pour lier la réponse au message, clé étrangère)
 
Je veux classer par reponses.id_message. Le truc, c'est qu'il faut que ça sélectionne la date et l'heure qui correspondent à ce reponses.id_message...

Reply

Marsh Posté le 27-09-2006 à 22:51:07    

tu tri par id_reponse. Soit logique : indique lui quel id_message tu veux parmis ceux qui sont regroupé au moment du group by. Si tu ne lui indiques pas, il triera à partir de données pris au hasard et un tri basé sur du hasard ne done pas souvent un tri trés naturel.
 
Quand au fait que t'ai besoin de la date et heure du message correspondant au id_message, ca nécessite l'utilisation de requette imbriqué pour que ca soit fait proprement (en clair, la requette principale contiendra une requette qui fera le group by avec indication de la sélection du bon id_message par heure. (plus grand, plus petit, autre?)

Reply

Marsh Posté le 27-09-2006 à 22:51:38    

Si mes dates étaient en format date ça serait p'têtre plus simple.
Par contre, je crois que c'est en format américain sur MySQL, ça donne quoi à traduire en date jj/mm/aaaa ?

Reply

Marsh Posté le 27-09-2006 à 23:07:48    

Je stoppe pour ce soir. Pour reformuler ce que je veux :
- afficher : le login du posteur du message et le sujet du message
- afficher : la date de la dernière réponse postée et l'heure associée...
 
J'ai essayé de faire une requête imbriquée, mais je dois avoir des problèmes de syntaxe, j'ai des erreurs. Quelqu'un pourrait me redonner la forme que ça doit avoir ? Merci beaucoup à toi omega2, et merci aux autres :jap:

Reply

Marsh Posté le 27-09-2006 à 23:11:52    

J'ai trouvé chez mon meilleur ami (google) :

Citation :

SELECT Design
FROM Produit
WHERE Prix = (SELECT Prix
FROM Produit
WHERE Design = 'chaise')


 
C'est un exemple, mais j'ai déjà la structure (je débute en php/SQL au cas où vous auriez pas remarqué :D ). Je m'y remets demain, encore merci :jap:

Reply

Marsh Posté le 27-09-2006 à 23:11:52   

Reply

Marsh Posté le 28-09-2006 à 10:23:02    

j'ai une question : pourquoi la date et l'heure ne sont pas dans le même champ ?
parceque tu cherches un peu la merde avec tes deux champs, ça te complique vachement la vie...

Reply

Marsh Posté le 28-09-2006 à 11:11:06    

C'est une bonne question :D Je savais pas qu'on pouvait mettre les deux dans un seul champ. Comme j'ai dit, je suis débutant, et j'apprends seul, donc les finesses pour l'instant...

Reply

Marsh Posté le 28-09-2006 à 14:49:38    

J'ai réussi :

Citation :

select reponses.date, reponses.heure, messages.sujet,
messages.login, messages.id, reponses.id_reponse, reponses.id_message
from messages, reponses
where messages.id = reponses.id_message
group by reponses.id_message
order by reponses.id_reponse DESC


 
J'ai fait étape par étape, en ajoutant le code de la requete au fur et à mesure. Je m'embrouillais les pinceaux en essayant de tout faire d'un coup hier. Merci à tous ceux qui m'ont aidé. Je prends tous les conseils aussi, sur l'organisation du code, et tout ce qui peut éclaircir mon code. Merci encore une fois à ceux qui prennent un peu de leur temps pour conseiller et aider :jap:

Reply

Marsh Posté le 28-09-2006 à 14:51:34    

Voilà le résultat que je voulais :
http://michalatore.free.fr/php-pb-2.JPG
On a le login du posteur, le sujet de son message, et en face, la date et l'heure de la dernière réponse.

Reply

Sujets relatifs:

Leave a Replay

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