Partage
  • Partager sur Facebook
  • Partager sur Twitter

Requête SQL en fonction de la date

Sujet résolu
    22 juillet 2010 à 20:08:15

    Bonjour,

    Voilà, je vous expose mon problème qui j'espère pourra être résolu par votre aide ^^ !

    Je souhaite créer un système de news programmé en fonction de la date du jour (jour + mois, pas avec l'année)

    j'ai une table : news
    dedans j'ai 4 champs : date ; titre ; image ; contenu
    je souhaite faire un format de date JJ-MM (exemple : 21_04 pour le 21 avril);(pour ne pas être bloqué avec le changement de YYYY chaque année !)

    (résumé de ce que j'ai : 1 table de 366 entrées en 4 champs)

    j'aimerais savoir comment faire ma requête SQL pour que les champs (titre, images et contenu) soient appelés en fonction de la date du jour
    j'ai beau lire, relire et relire les cours sur la bdd, rien à y faire je n'arrive pas à ça :(

    Je vous remercie de votre aide ! :)
    • Partager sur Facebook
    • Partager sur Twitter
      22 juillet 2010 à 20:12:34

      Rien compris. Donne-nous les schémas de ta/tes table(s), un jeu d'essai et le résultat souhaité en fonction dudit jeu d'essai.

      Si tu as une date et que tu veux récupérer uniquement le jour et le mois, utilise des fonctions comme DATE_FORMAT (MySQL) ou encore DAY(), MONTH()...
      • Partager sur Facebook
      • Partager sur Twitter
        22 juillet 2010 à 20:18:50

        désolé ! du mal a m'expliquer !

        j'ai 1 table de 366 entrées en 4 champs (date, titre, image et contenu)
        je souhaite afficher les champs titre, image et contenu MAIS en fonction de la date du jour en format JJ-MM (mon champ "date" serait donc l'identifiant de mon entrée en format JJ-MM)

        j'espère être plus compréhensible
        • Partager sur Facebook
        • Partager sur Twitter
          22 juillet 2010 à 20:25:23

          Ah oui, je comprends. Il doit y avoir plusieurs solutions à ce problème, je ne connais pas la plus performante, mais un truc simple comme celui-ci devrait fonctionner (MySQL) :

          SELECT DATE_FORMAT(date, '%d/%m') AS dateJM, titre, image, contenu
          FROM table_name
          WHERE DAY(date) = DAY(NOW())
              AND MONTH(date) = MONTH(NOW());
          


          J'ai pensé à utiliser DAYOFYEAR() mais je crois que ça ne fonctionnerait pas comme prévu avec les années bissextiles, la requête ci-dessus devrait toujours fonctionner normalement.
          • Partager sur Facebook
          • Partager sur Twitter
            22 juillet 2010 à 23:26:36

            Citation : Fayden

            Ah oui, je comprends. Il doit y avoir plusieurs solutions à ce problème, je ne connais pas la plus performante, mais un truc simple comme celui-ci devrait fonctionner (MySQL) :

            SELECT DATE_FORMAT(date, '%d/%m') AS dateJM, titre, image, contenu
            FROM table_name
            WHERE DAY(date) = DAY(NOW())
                AND MONTH(date) = MONTH(NOW());
            



            J'ai pensé à utiliser DAYOFYEAR() mais je crois que ça ne fonctionnerait pas comme prévu avec les années bissextiles, la requête ci-dessus devrait toujours fonctionner normalement.



            Merci,
            j'ai testé mais cela ne fonctionne pas :o

            voici la reqûete que j'obtiens :
            <?php
            try
            {
            	$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');
            }
            catch (Exception $e)
            {
                    die('Erreur : ' . $e->getMessage());
            }
            ?>
            
            
            <?php
            try
            {
            	$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');
            }
            catch(Exception $e)
            {
                    die('Erreur : '.$e->getMessage());
            }
            
            $reponse = $bdd->query('SELECT  DATE_FORMAT(date, '%d/%m') AS dateJM, titre, image, contenu 
            			FROM table_name
            			WHERE DAY(date) = DAY(NOW())
            			AND MONTH(date) = MONTH(NOW())
            ');
            
            while ($donnees = $reponse->fetch())
            {
            ?>
                <p>
                titre : <?php echo $donnees['titre']; ?><br />
                images : <?php echo $donnees['image']; ?><br />
                rédaction : <?php echo $donnees['contenu']; ?> 
               </p>
            <?php
            }
            
            $reponse->closeCursor(); // Termine le traitement de la requête
            
            ?>
            


            et voici ma base de donnée :
            bbd : test
            table : box
            champ :
            • - dateJM (type : date) ............. (j'ai été obligé d'entrée une valeur YYYY-MM-JJ)
            • - titre (type : varchar(255))
            • - image (type : text)
            • - contenu (type : text)



            Voilà, je ne sais pas d'ou est le problème, merci de vos aides ! ;)
            • Partager sur Facebook
            • Partager sur Twitter
              22 juillet 2010 à 23:39:07

              Citation : soinf

              Voilà, je ne sais pas d'ou est le problème, merci de vos aides ! ;)



              Nous non plus puisque tu ne postes pas le message d'erreur.

              Enfin je subodore une parse error ligne 23 à cause des ' malheureusement copicollées dans une chaîne en '... mets donc des "...
              • Partager sur Facebook
              • Partager sur Twitter
                22 juillet 2010 à 23:59:43

                Citation : Lord Casque Noir

                Citation : soinf

                Voilà, je ne sais pas d'ou est le problème, merci de vos aides ! ;)



                Nous non plus puisque tu ne postes pas le message d'erreur.

                Enfin je subodore une parse error ligne 23 à cause des ' malheureusement copicollées dans une chaîne en '... mets donc des "...



                J'ai corrigé les ' en "

                voilà ce que j'obtiens en message d'erreur :
                Fatal error: Call to a member function fetch() on a non-object


                voici la reqûete que j'obtiens :
                <?php
                try
                {
                	$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');
                }
                catch (Exception $e)
                {
                        die('Erreur : ' . $e->getMessage());
                }
                ?>
                
                
                <?php
                try
                {
                	$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');
                }
                catch(Exception $e)
                {
                        die('Erreur : '.$e->getMessage());
                }
                
                $reponse = $bdd->query('SELECT  DATE_FORMAT(date, "%d/%m") AS dateJM, titre, image, contenu 
                			FROM table_name
                			WHERE DAY(date) = DAY(NOW())
                			AND MONTH(date) = MONTH(NOW())
                ');
                
                while ($donnees = $reponse->fetch())
                {
                ?>
                    <p>
                    titre : <?php echo $donnees['titre']; ?><br />
                    images : <?php echo $donnees['image']; ?><br />
                    rédaction : <?php echo $donnees['contenu']; ?> 
                   </p>
                <?php
                }
                
                $reponse->closeCursor(); // Termine le traitement de la requête
                
                ?>
                


                et voici ma base de donnée :
                bbd : test
                table : box
                champ :
                • - dateJM (type : date) ............. (j'ai été obligé d'entrée une valeur YYYY-MM-JJ)
                • - titre (type : varchar(255))
                • - image (type : text)
                • - contenu (type : text)



                Voilà, merci de vos aides ! ;)
                • Partager sur Facebook
                • Partager sur Twitter
                  23 juillet 2010 à 0:57:14

                  Active les exceptions dans le constructeur de PDO.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    23 juillet 2010 à 1:07:36

                    Il n'a même pas changé le nom de la table...
                    • Partager sur Facebook
                    • Partager sur Twitter
                      23 juillet 2010 à 9:00:17

                      Attention aussi à la colonne date qui est un mot réservé ;)
                      • Partager sur Facebook
                      • Partager sur Twitter
                        23 juillet 2010 à 10:00:51

                        J'avais changé le nom de ma table sur mon pc mais oublié de le faire ici :-°

                        voilà ce que j'obtiens en message d'erreur :
                        Fatal error: Call to a member function fetch() on a non-object


                        voici la reqûete que j'obtiens :
                        <?php
                        try
                        {
                        	$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');
                        }
                        catch (Exception $e)
                        {
                                die('Erreur : ' . $e->getMessage());
                        }
                        ?>
                        
                        
                        <?php
                        try
                        {
                        	$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');
                        }
                        catch(Exception $e)
                        {
                                die('Erreur : '.$e->getMessage());
                        }
                        
                        $reponse = $bdd->query('SELECT  DATE_FORMAT(date, "%d/%m") AS dateJM, titre, image, contenu 
                        			FROM box
                        			WHERE DAY(date) = DAY(NOW())
                        			AND MONTH(date) = MONTH(NOW())
                        ');
                        
                        while ($donnees = $reponse->fetch())
                        {
                        ?>
                            <p>
                            titre : <?php echo $donnees['titre']; ?><br />
                            images : <?php echo $donnees['image']; ?><br />
                            rédaction : <?php echo $donnees['contenu']; ?> 
                           </p>
                        <?php
                        }
                        
                        $reponse->closeCursor(); // Termine le traitement de la requête
                        
                        ?>
                        


                        Je suis embêté car je ne sais pas d'ou viens le problème ni comment résoudre. Est-ce que le nom de mes champs est correct par rapport au code de la requête ?
                        et pour mon champ "date", je ne comprend pas car dans la requête il y a "DATE_FORMAT" , "dateJM" et "date", lequel dois-je choisir en nom de champ et est-ce que je dois mettre ce champ en type:date ou type:text (pour pouvoir avoir le format JJ-MM sans l'année)

                        voici ma base de donnée que j'ai pour le moment:
                        bbd : test
                        table : box
                        champ :
                        • - dateJM (type : date) ............. (j'ai été obligé d'entrée une valeur YYYY-MM-JJ, donc je me demande si je dois passer en type : text afin d'entrée une valeur JJ-MM)
                        • - titre (type : varchar(255))
                        • - image (type : text)
                        • - contenu (type : text)



                        MERCI de vos aides ! ;)
                        • Partager sur Facebook
                        • Partager sur Twitter
                          23 juillet 2010 à 10:37:45

                          Citation : angelo

                          Attention aussi à la colonne date qui est un mot réservé ;)


                          Ah ba non j'avais pas vu; la colonne s'appelle dateJM apparemment ...

                          dans ce cas, la requête est fausse puisque tu n'utilises pas le bon nom:
                          SELECT  DATE_FORMAT(dateJM, "%d/%m") AS dateJM, titre, image, contenu 
                          			FROM box
                          			WHERE DAY(dateJM) = DAY(NOW())
                          			AND MONTH(dateJM) = MONTH(NOW())
                          

                          • Partager sur Facebook
                          • Partager sur Twitter
                            23 juillet 2010 à 12:22:51

                            Bin, comme t'as toujours pas activé les exceptions dans le constructeur de PDO, tu n'as donc aucun message d'erreur quand il y a une erreur... je ne comprends pas pourquoi tout le monde préfère tâtonner au lieu d'activer les messages d'erreur XD
                            • Partager sur Facebook
                            • Partager sur Twitter
                              23 juillet 2010 à 13:05:13

                              comment ca activer les messages d'erreur ? Tu fais comment ?

                              Sinon, j'aimerais savoir comment je dois enregistrer ma valeur pour le champs dateJM pour n'avoir que le jour et le mois sans l'année ?

                              MERCI !!!
                              • Partager sur Facebook
                              • Partager sur Twitter
                                23 juillet 2010 à 14:07:50

                                cherche PDO::ERRMODE_EXCEPTION
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  23 juillet 2010 à 15:15:21

                                  Pourquoi tu n'utilises pas les timestamp ?
                                  C'est super pratique, tu as la date à la seconde près, mais tu peux sélectionner seulement que ce qui t'intéresse, et au format que tu veux.
                                  Le timestamp c'est le nombre de seconde écoulées depuis le 1er janvier 1970.
                                  A l'heure (ou plutôt seconde) où je t'écris, le timestamp vaut : 1279890595.
                                  On va prendre celui la pour les exemples qui suivent :
                                  <?php
                                  $timestamp = time(); // retourne le moment présent soit : 1279890595
                                  
                                  // Si tu veux afficher le date complète
                                  echo 'Nous sommes le '.date("d/m/Y", $timestamp).' et il est '.date("H:i:s", $timestamp);
                                  // Nous sommes le 23/07/2010 et il est 13:09:55
                                  
                                  // Au contraire, si tu veux créer un timestamp précis tu as la fonction mktime() qui s'utilise comme suit :
                                  mktime($heure, $minute, $seconde, $mois, $jour, $annee);
                                  // Prenons un exemple, tu veux le timestamp du 12 avril 2010
                                  $timestamp = mktime(0, 0, 0, 04, 12, 2010); // renvoie : 1271030400
                                  


                                  Ainsi tu pourrais très bien ne prendre que le jour et le mois (ce qui t'intéresse) en faisant date("dm", $timestamp); ce qui dans mon exemple renverrait : 2307, par exemple.

                                  Plus d'info ici : http://php.net/manual/fr/function.date.php
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    25 juillet 2010 à 10:24:37

                                    Merci à tous ! ca marche !
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Requête SQL en fonction de la date

                                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                    • Editeur
                                    • Markdown