Partage
  • Partager sur Facebook
  • Partager sur Twitter

Requête changeante "préprogramée"...

...suivant DATE...

Sujet résolu
    30 août 2010 à 8:20:05

    Bonjour,

    Mon nouveau site (php, mysql) tourne depuis qques semaines.
    (un peu au ralenti, site pour club de basket, et le championnat va enfin recommencer)...(fait bénévolement pour le club, asbl)

    Et donc avec l'arrivée de la nouvelle saison, quelques optimisations se fond nécessaire.



    Tous les calendriers de championnat de toutes les équipes sont regroupé dans une table.

    J'ai pour habitude d'annoncer, sur une page isolée, la prochaine journée de championnat.
    Au début j'avais pensé les encoder chaque semaine, mais c'est un peu bête vu que tout est dans la BDD.

    Comment faire pour qu'automatiquement, ma requête se modifie d'elle même tous les lundis pour annoncer les matchs du weekend qui arrive.
    (donc les dates dans la table correspondant au samedi et au dimanche qui arrive).

    (compliqué à expliquer, mais relativement simple en fait.....sauf à coder)... :-°




    Et si requête totalement automatique indépendante impossible, je pourais pré-encoder tous les changements de requête....pour que ca "switch"tout seul le lundi matin???



    (en fait cette solution me sera doublement utile, car sur une autre page, j'annonce les résultats du weekend, donc la, pareil, mais sauf que la, dès le samedi matin on annonce les résultats du weekend en cours.....)



    D'avance merci à ceux qui me liront jusqu'au bout....et qui sauront faire avancer mon schmilblick.... :)
    • Partager sur Facebook
    • Partager sur Twitter
      30 août 2010 à 9:03:07

      Salut,

      C'est possible avec un trigger, mais je ne sais pas si MySQL supporte les trigger temporels. J'ai trouvé cet article qui en parle.
      Ça dépend apparemment aussi de la version de MySQL que tu utilise.
      • Partager sur Facebook
      • Partager sur Twitter

      "'But I don't want to go among mad people,' said Alice. 'Oh, you can't help that,' said the cat. 'We're all mad here.'" Lewis Carroll

        30 août 2010 à 9:26:10

        (ok, je vais fouiller, même si ce ne me parait pas gagné d'avance..)


        ...merci !
        • Partager sur Facebook
        • Partager sur Twitter
          30 août 2010 à 16:46:07

          bonjour, une piste simple : en gérant dans les WHERE des requêtes la date système et les dates des matchs (calcul de différences de dates).
          Il suffit de paramétrer les requêtes.
          Concernant les triggers. Ceux-ci sont dans la BD et déclenchent à un instant t une action (une sauvegarde par exemple, une mise à jour, ...).
          Ils ne changeront pas le code SQL car je suppose que vous n'utilisez pas de procédures stockées.
          C'est donc bien dans le code SQL de vos scripts PHP que vous devez travailler.
          • Partager sur Facebook
          • Partager sur Twitter
            30 août 2010 à 21:33:09

            J'y ai réfléchi durant la journée et je suis arrivé à un constat semblable.

            Je pense qu'il est possible d'appeler des données situées entre 2dates définies.

            Ces dates pourraient être "NOW" et "NOW + 6jour"

            La fonction NOW est mise à jour toute seule comme une grande....

            Donc ca devrait marcher.

            Reste à mettre ca dans le langage approprié....et c'est la que ca va coincer...
            Apprêtez-vous à ce que je crie "à l'aide" dans qques jours....(ou déjà demain...)
            • Partager sur Facebook
            • Partager sur Twitter
              30 août 2010 à 21:59:50

              Citation : Veaullus


              Reste à mettre ca dans le langage approprié....et c'est la que ca va coincer...


              En SQL, tout simplement.
              Fonctions de date en PHP.
              • Partager sur Facebook
              • Partager sur Twitter
                31 août 2010 à 9:26:52

                Bonjour,


                En effet en jouant avec la fonction "DATE" (et pas la NOW vu que seul la date m'intéresse).


                Je vais donc définir l'intervalle de recherche via un CURDATE et un BETWEEN.

                Le problème est de réussir à obtenir un "CURDATE + 6 DAY".

                J'ai essayé avec "INTERVAL", "INTERVAL + ...", etc...

                D'habitude "Google" est mon ami, mais ici, rien...

                Rien qui fonctionne chez moi en tous cas...
                $retour = mysql_query("SELECT * FROM calendriers WHERE date BETWEEN CURDATE() and (CURDATE()+ 5 DAY)");
                


                Le but du jeu est de trouver par soi-même...et j'aime ca...(ca fait des années que je fonctionne de la sorte),mais ici je bloque...

                Auriez-vous une idée? un coup de main? (pas les pieds merci)


                Merci Messieurs (et Mesdames au cas ou...)


                ET bonne journée.
                • Partager sur Facebook
                • Partager sur Twitter
                  31 août 2010 à 10:04:59

                  Tu n'es pas loin. As-tu essayé la fonction DATE_ADD ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    31 août 2010 à 11:48:09

                    Bonjour,
                    petit exemple avec une table matches(id, lieu, date_match)
                    + 6 jours pour éviter le dimanche d'avoir le samedi suivant
                    <?php
                    $cn = new PDO("mysql:host=localhost;dbname=sitezero", "root", "");
                    $lsSQL = "SELECT * FROM matches WHERE date_match >= CURRENT_DATE() AND date_match <= DATE_ADD(CURRENT_DATE(),INTERVAL 6 DAY)";
                    $rs = $cn->query($lsSQL);
                    $rs->setFetchMode(PDO::FETCH_ASSOC);
                    $lsResultat = "";
                    foreach($rs as $enr)
                    {
                       foreach($enr as $champ => $valeur) $lsResultat .= "$valeur,";
                       $lsResultat .= "<br/>";
                    }
                    echo $lsResultat;
                    ?>
                    
                    • Partager sur Facebook
                    • Partager sur Twitter
                      31 août 2010 à 12:30:49

                      Autant utiliser la clause BETWEEN dans ce cas :) :
                      SELECT * FROM matches WHERE date_match BETWEEN CURRENT_DATE() AND DATE_ADD(CURRENT_DATE(),INTERVAL 6 DAY)
                      
                      • Partager sur Facebook
                      • Partager sur Twitter
                        31 août 2010 à 20:26:14

                        Perfect...

                        Je viens de rentrer et d'essayer ca...

                        Et ca fonctionne of course...

                        Il me reste à "inverser" la tendance pour une page "résultat".
                        Qui ira chercher les matchs entre "current date -1jour" et "current date - 6jours"...

                        Je viens d'essayer en vitesse, ca ne marche pas, je vais essayer une fois au calme, sinon je reviendrais vers vous...


                        MERCI à vous...

                        Je marquerais ce sujet comme résolu une fois la fonction inverse réussie.


                        Bonne soirée.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          2 septembre 2010 à 9:22:48

                          Comme je le craignais, me revoilà !!


                          Pour ma page "résultats" je dois aller chercher les dates entre la "current_date" et la "current_date -6jours".

                          Je dois donc utiliser DATE_SUB.....sauf que rien ne fonctionne.

                          Aucun message d'erreur, mais aucune donnée n'est rapatriée.
                          Pourtant j'ai des données qui correspondent au laps de temps défini...

                          Bizaarrrrrrrrrrr

                          $retour = mysql_query("SELECT * FROM calendriers WHERE date between DATE_SUB(CURRENT_DATE(),INTERVAL 6 DAY) and DATE_ADD(CURRENT_DATE()) ORDER by date, heure");
                          while ($donnees = mysql_fetch_array($retour))
                          


                          Merci



                          EDIT : Je viens de trouver.J'étais tellement focalisé sur mon DATE SUB que je ne m'apercevais même pas de la faute dans mon DATE ADD.

                          Désolé pour ce dernier dérangement.


                          Merci à tous.

                          Voila le code, pour d'autres si ca peut servir.

                          $retour = mysql_query("SELECT * FROM calendriers WHERE date between DATE_SUB(CURRENT_DATE(),INTERVAL 6 DAY) and CURRENT_DATE() ORDER by date, heure");
                          
                          • Partager sur Facebook
                          • Partager sur Twitter
                            2 septembre 2010 à 9:34:35

                            super , on est des victimes de nos copier/coller :)
                            • Partager sur Facebook
                            • Partager sur Twitter

                            Requête changeante "préprogramée"...

                            × 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