Partage
  • Partager sur Facebook
  • Partager sur Twitter

Pb requête sélection sur date

Impossible d'avoir le jour en cours avec now()

Sujet résolu
    17 avril 2022 à 10:02:56

    Bonjour j'ai un petit soucis de requête de sélection sur un champ de date.

    En effet quelque soit la méthode utilisée je n'arrive pas à avoir les données du jour en cours!:colere2:

    Nous sommes le 2022-04-17 à 10:00:00.

    Si je fais ces requêtes ou stamp (qui est de type timestamp) contient la date sous le format  :an-mois-jour h:mn:s

    $reponse = $dbh->query("SELECT * FROM ruche".$NumRuche." WHERE stamp BETWEEN CAST('2022-04-16' AS DATE) AND CAST('2022-04-17' AS DATE) ORDER BY stamp DESC");
    
    
    
    $reponse = $dbh->query("SELECT * FROM ruche".$NumRuche." WHERE stamp BETWEEN CAST('2022-04-15' AS DATE) AND CAST(NOW() AS DATE) ORDER BY stamp DESC");
    
    
    
    $reponse = $dbh->query("SELECT * FROM ruche".$NumRuche." WHERE stamp BETWEEN CAST('2022-04-16' AS DATE) AND CAST(CURRENT_DATE AS DATE) ORDER BY stamp DESC");
    
    


    J'obtiens bien des données mais pas celle en date du 2022-04-17 en effet toutes ces requêtes commencent au 2022-04-16 23:59:59...

    Que j'utilise la date de fin en dur (2022-04-17) ou avec NOW() ou avec CURRENT_DATE!

    Je précise que je suis sur Raspberry avec MariaDB, si des fois cela change quelque chose.

    Merci pour vous éventuelles idées!

    • Partager sur Facebook
    • Partager sur Twitter
      19 avril 2022 à 13:47:45

      Bonjour,

      La colonne stamp est de type TIMESTAMP, donc quand tu l'utilises dans ta clause WHERE en comparant avec une DATE, alors MySQL fait automatiquement une conversion. Lorsqu'une date est convertie en TIMESTAMP, MySQL rajoute l'heure, et par défaut 00:00:00 ...

      Dans ton exemple :

      SELECT *
      FROM ruche".$NumRuche."
      WHERE stamp BETWEEN
          CAST('2022-04-16' AS DATE)
          AND CAST('2022-04-17' AS DATE)
      ORDER BY stamp DESC

      Cela revient à écrire :

      SELECT *
      FROM ruche".$NumRuche."
      WHERE stamp BETWEEN
          '2022-04-16 00:00:00'
          AND '2022-04-17 00:00:00'
      ORDER BY stamp DESC

      Tu vois le truc ?

      Si tu veux le 17 avril dans ton résultat, il faut fonctionner différemment, par exemple en extrayant la date de ton stamp avant de comparer :

      SELECT *
      FROM ruche".$NumRuche."
      WHERE DATE( stamp ) BETWEEN
          '2022-04-16'
          AND '2022-04-17'
      ORDER BY stamp DESC

      Après, une remarque sans rapport mais qui attire mon attention. Tu as des noms de table variable :

      FROM ruche".$NumRuche."

      C'est une mauvaise pratique, indiquant que tu crées une table par ruche ... pas bon !

      Je ne connais pas ton projet, mais à mon avis tu devrais plutôt rajouter une colonne num_ruche dans la table ruche et n'avoir qu'une seule table ...

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        19 avril 2022 à 15:53:21

        Merci pour la correction du code. Je veins de le tester il fonctionne nickel je peux même faire ceci :

        $reponse = $dbh->query("SELECT * FROM ruche".$NumRuche." WHERE DATE(stamp) BETWEEN CURRENT_DATE -1 AND CURRENT_DATE ORDER BY stamp DESC");

        afin d'afficher le jour en cours et le jour d'avant!

        Et oui bien vu j'ai effectivement une table par ruche... (c'était un collègue informaticien qui avait commencé ce code et n'a plus le temps de s'en occuper qui l'avait conçu comme cela)

        Plusieurs tables en tout cas pour le moment car il me faudrait aussi reprogrammer toutes mes ruches... (mais j'y songe de plus en plus au vue de vos remarques à tous)

        Et je n'ai toujours pas non plus trouvé de réponse claire à un autre de mes post :

        https://openclassrooms.com/forum/sujet/une-table-ou-plusieurs-tables

        pour savoir si mon Raspberry a plus de chance de louper des mises à jour d'une table commune (avec rajout d'une colonne id ruche) qu'avec plusieurs tables car les Arduino (5 actuellement) se connectent au serveur indépendamment quand ils en ont envie ...Et les demandes de mises à jour peuvent se télescoper, je sais que le Raspberry peut gérer plusieurs connections internet simultanées mais je ne sais pas trop comment cela se passe lors de l'écriture dans une ou plusieurs table simultanément.

        Merci encore

        • Partager sur Facebook
        • Partager sur Twitter

        Pb requête sélection sur date

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        • Editeur
        • Markdown