IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Requête en fonction de la date du champ


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 14
    Par défaut Requête en fonction de la date du champ
    Bonjour à tous,

    Je réalise actuellement une chatbox relativement complète (interface d'administration, inscription, log, anti-spam, modo, archives...) en php/mysql/html/css. La date/heure des messages s'affichent actuellement sous la forme :
    Tout de fois, une précision à la seconde pour des messages de plus de trois mois ou encore afficher le jour/moi/année pour des messages très récents n'a pas de sens . Ainsi à l'aide d'instructions conditionnelles en php j'arrive à afficher une date/heure sous la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [%d/%m/%Y %H:%i] pour les messages de plus de 24h
    [%H:%i:%s] pour les messages de moins de 24h
    De telle vérifications pour chaque message affiché demande malheureusement beaucoup de ressources...

    J'en viens ainsi à ma question : Comment puis-je directement formater la date/heure du message à afficher selon son ancienneté à l'aide d'une requête mySQL ?

    Pour info voici la requête que j'utilise actuellement pour lire les messages :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DATE_FORMAT(date, \'[%d/%m/%Y %H:%i:%s]\') AS date, pseudo, message FROM chat_messages WHERE id>(SELECT MAX(id)-100 FROM chat_messages) ORDER BY id
    Et voici le plan de la bdd :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    |    id  |         date                |   pseudo   |  message  |
    ---------------------------------------------------------------
    |   1   | 2012-11-28 18:41:19  | Bellumm  |   blabla      |
    J'imagine qu'il va falloir utiliser CASE ou IF
    Merci pour votre aide

    Bellumm

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Par défaut
    C'est pas terrible mais c'est un début :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT IF( DATEDIFF(NOW(),date)=0, DATE_FORMAT(date, '[%d/%m/%Y %H:%i:%s]'), DATE_FORMAT(date, '[%d/%m/%Y]')) AS date, pseudo, message FROM chat_messages ORDER BY id DESC LIMIT 100
    Au lieu de 24 heures, c'est lorsque le jour est différent.
    Il doit y avoir une fonction TIMEDIFF.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 14
    Par défaut
    Merci beaucoup,

    J'ai légèrement adapté la requête pour qu'elle me donne les messages en ordre croissant en commençant par la fin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT 
         IF( DATEDIFF(NOW(),date)=0, 
              DATE_FORMAT(date, '[%H:%i:%s]'), 
    	  DATE_FORMAT(date, '[%d/%m/%Y %H:%i]')) AS date, 
         pseudo, 
         message 
    FROM chat_messages 
    WHERE id>(SELECT MAX(id)-100 FROM chat_messages) 
    ORDER BY id
    Penses-tu qu'elle puisse être améliorée ou optimisée.

    Bellumm

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Penses-tu qu'elle puisse être améliorée ou optimisée.
    Oui, en changeant le nom de la colonne (et pas champ ! ) "date" qui est un mot réservé du langage SQL.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Par défaut
    C'est parfois risqué d'utiliser l'id auto-incrémenté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FROM chat_messages 
    WHERE id>(SELECT MAX(id)-100 FROM chat_messages)
    En théorie, il faudrait utiliser la date :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FROM chat_messages 
    ORDER BY date DESC LIMIT 100
    ( C'est ce que je voulais faire dans ma première proposition, mais apparemment j'ai merdouillé...)
    Le fait que l'ordre soit inversé par rapport à ce que tu attends ne devrait pas te poser de gros problème.

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 14
    Par défaut
    merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/11/2013, 11h53
  2. Requête SQL - fonction iff & calcul d'un champ selon d'autres champs
    Par Séphirée dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 10/05/2013, 22h51
  3. Requête en fonction de la date
    Par the watcher dans le forum Requêtes
    Réponses: 4
    Dernier message: 17/04/2012, 10h16
  4. Requête avec date et champs oui/non
    Par MoonShadows dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 07/07/2007, 01h53
  5. Requête en fonction des caractères de mes champs
    Par ginkas31 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 05/07/2007, 19h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo