Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SQL] Faire un if sur ce que contient 2 colonnes

Sujet résolu
    15 février 2021 à 18:37:36

    Bonjour à tous,

    Je viens vers vous car j'ai un problème de requête SQL, j'aimerais ranger par ordre croissant 2 colonnes d'une même table (DATE_RESERVATION et NAVETTE_RETOUR), sauf que là où ça se complique : la 1ère colonne ne contient que des heures de réservations et l'autre colonne peut posséder des heures de réservations mais des fois des "0", j'aimerais donc avec une seule et même requête si possible, checker si cette colonne "NAVETTE_RETOUR" contient des "0", si non rangé par ordre croissant avec la colonne "DATE_RESERVATION", est-ce que déjà pour commencer on peut faire une sorte de if en SQL ?

    Voici ce que j'ai déjà testé :

    SELECT * FROM wp_ficheClients 
          WHERE DATE_RESERVATION <= CURDATE() +1 AND DATE_RESERVATION >= CURDATE() 
          AND A_PAYE = 1 AND DESCENTE = "EYG -> GV (20 km)" AND STATIONNEMENT = "Le Port"
                      
          ORDER BY 
          CASE
          	WHEN HEURE_NAVETTE_RETOUR != "0" THEN HEURE_NAVETTE_RETOUR
            WHEN HEURE_NAVETTE_RETOUR = "0" THEN DATE_RESERVATION 
          END ASC

    Explication du code :

    Donc en gros, je récupère tous les clients d'aujourd'hui qui ont payé et qui font une certaine descente (c'est des kayaks) et dont les gens sont stationnées à un certains endroit sur le parcours.

    Merci à vous et merci de ne pas me juger sur la qualité du code, y a toujours plus simple de faire mieux et d'optimiser..

    • Partager sur Facebook
    • Partager sur Twitter
      15 février 2021 à 18:52:30

      Tu pourrais donner un exemple ? Parce que tu dis "contenir des zéros". C'est "00:00" ? Autre chose ?

      Parce que ta requête ne fait que comparer à "0".

      Quel type d'ailleurs ? TIME ?

      PS : n'impliquant aucun code PHP, ça aurait plutôt dû être posté en forum base de données AMHA

      -
      Edité par julp 15 février 2021 à 18:53:49

      • Partager sur Facebook
      • Partager sur Twitter
        15 février 2021 à 21:36:58

        Je l'ai posté là-bas aussi, et en soi il n'y a pas de code PHP mais je réalise un site web en PHP, donc je savais pas forcément où le mettre. ^^

        Le "DATE_RESREVATION" est un datetime, tout ce qui a de plus logique et "NAVETTE_RETOUR" est un tinytext.

        Donc effectivement quand, il n'y pas de navette retour c'est un "0" et pas 0 (je préfère le préciser) vu que c'est du text, s'il y a une navette alors ça ressemble à par exemple : 15:00 ou 09:30, etc.

        -
        Edité par Guillaumedu15 15 février 2021 à 21:37:12

        • Partager sur Facebook
        • Partager sur Twitter
          15 février 2021 à 21:43:41

          > Je l'ai posté là-bas aussi

          On ne poste jamais une même question à plusieurs endroits (au besoin, c'est déplacé), tu vas te faire tirer les oreilles ...

          > quand, il n'y pas de navette retour c'est un "0"

          Pourquoi pas NULL ? Et un type TIME plutôt que TINYTEXT ? Voire même un DATETIME aussi même si ça paraît inutile car ça reprend la même date, au moins ça aurait permis de faire un IFNULL de DATETIME.

          Bref, un ORDER va avoir du mal à trier deux types de données totalement différents (des "heures" et des datetimes) en même temps, ça ne va sûrement pas donner ce que tu penses. Il faut séparer les deux (si approprié) ou alors trouver le moyen de construire un DATETIME intégrant l'"heure" (quitte à ce qu'ils soient "bidons" quand ça vaut "0") pour que ça trie comme tu le veux.

          Tu veux quel genre de résultat ?

          2020-02-15 13:55:00 | 0
          2020-02-15 13:55:00 | 15:00
          2020-02-16 12:55:00 | 0
          2020-02-15 12:55:00 | 14:00
          
          2020-02-15 13:55:00 | 0
          2020-02-16 12:55:00 | 0
          2020-02-15 13:55:00 | 15:00
          2020-02-15 12:55:00 | 14:00
          

          ORDER BY DATE_RESERVATION, HEURE_NAVETTE_RETOUR ?

          -
          Edité par julp 15 février 2021 à 22:00:02

          • Partager sur Facebook
          • Partager sur Twitter
            16 février 2021 à 0:31:55

            Alors je suis obligé de garder le "0", car il pourra être mis par des utilisateurs, et ce même champs comme je l'ai dit précédemment pourra obtenir des heures comme DATE_RESERVATION, vu que NAVETTE_RETOUR = "0", si la personne est garé en bas de la descente ou bien NAVETTE_RETOUR = "18:00" s'il s'est garé en haut de la descente. 😉


            > Tu veux quel genre de résultat ?

            Du coup, voici pour l'instant ce que j'ai, ça fonctionne comme je veux mais comme ma requête sélectionne tous les clients et qu'ensuite après je fais un traitement par php, tu te doutes que dans quelques cas si un client est garé en haut de la descente - il a donc une navette retour à la fin - et qu'il commence (DATE_RESERVATION) = 09:00 et que NAVETTE_RETOUR = "15:00" ça ne sera pas trié correctement dans mon tableau final car j'ai mis des conditions partout mais elles sont séparées. Tu as un exemple concret dans mon tableau d'ailleurs, ligne 2, tu vois le 14:00 après le 16:00, alors qu'elle devrait être dans la 1ère ligne. Donc, c'est pour cela que j'aimerai que ça soit trié directement avec une requête SQL qu'en PHP, c'est trop bordélique 🤔
            Ici ma page des navettes :



            Donc tu vois il y a 2 tableaux puisque sur le parcours il y a 3 stationnement, au début, au milieu et à la fin, et du coup, comme tu l'auras sûrement compris c'est parce qu'il y a un stationnement au milieu que ça met le bazar (en plus le mec peut se stationner au milieu du parcours prendre une navette allé et une navette retour - oui il y a des gens comme ça ... , sinon ça fonctionnait tranquille :) .
            Je te joins aussi le comment c'est mis dans ma BDD, j'ai fait la même requête pour éviter que tu te perdes 😉 :



            Donc comme tu peux le voir les "0" ne doivent pas s'afficher mais ça je le fais déjà dans mon traitement PHP, c'est pour cela que je voulais tester en SQL si la colonne NAVETTE_RETOUR = "0" alors on fais rien, sinon on récupère la valeur de NAVETTE_RETOUR pour justement la triés et la mettre dans mon tableau. 
            Ouf c'est long à écrire, j'espère que tu comprends ce que je veux faire 😅, sinon tant pis je suis dispo pour te répondre 😁. 
            Merci en tout cas.


            [EDIT 1] : Sur le phpmyadmin, là où il y a la flèche rouge c'est la ligne qui pose problème, comme tu peux le voir le mec est garé au milieu et il fait une petite descente EYG -> LP
            Ouais et j'ai oublié de mentionner même si c'est pas très important les parcours de kayak font :
            EYG -> LP -> GV


            [EDIT 2] : Je te mets un autre exemple, comme je t'ai dit le mec se gare au milieu du parcours mais fait la grande descente donc EYG -> GV et du coup il ne l'affiche pas 😥, je te joins mon tableau et le phpmyadmin :


            Mon tableau :


            Et le phpmyadmin : 

            -
            Edité par Guillaumedu15 16 février 2021 à 1:02:36

            • Partager sur Facebook
            • Partager sur Twitter
              16 février 2021 à 1:30:37

              > les "0" ne doivent pas s'afficher

              > si la colonne NAVETTE_RETOUR = "0" alors on fais rien

              Je comprends WHERE HEURE_NAVETTE_RETOUR <> "0"

              > [EDIT 2] : Je te mets un autre exemple

              Sauf que sur cet exemple HEURE_NAVETTE_RETOUR ne vaut pas "0" donc erreur de code PHP ?

              -
              Edité par julp 16 février 2021 à 1:30:54

              • Partager sur Facebook
              • Partager sur Twitter
                16 février 2021 à 11:28:16

                Désolé mais je crois que j'ai pas tout compris de ce que tu voulais me dire 🤔, car là il y a des "0" partout ou des heures.

                Et, je n'ai aucune erreur PHP.

                [EDIT 1] : En fait, si NAVETTE_RETOUR = "0" on récupère DATE_RESERVATION, sinon on prends la valeur de NAVETTE_RETOUR et on trie le résultat par ordre croissant.

                -
                Edité par Guillaumedu15 16 février 2021 à 11:42:44

                • Partager sur Facebook
                • Partager sur Twitter
                  16 février 2021 à 11:37:42

                  Sur ton deuxième exemple, sur la ligne que tu as indiqué par une flèche rouge, HEURE_NAVETTE_RETOUR ne vaut pas "0".

                  > Et, je n'ai aucune erreur PHP.

                  Je voulais dire que ton code PHP en était faux ?

                  -
                  Edité par julp 16 février 2021 à 11:40:26

                  • Partager sur Facebook
                  • Partager sur Twitter
                    16 février 2021 à 11:44:58

                    Oui il ne vaut pas "0", car il fait une grande descente mais il est garé au milieu (LP) du parcours, ce qu'il signifie qu'il doit prendre une navette pour aller à EYG, il fait sa descente EYG -> GV et arrivé à GV il doit reprendre une navette pour aller à LP.

                    [EDIT 1] : Donc en gros, dans mon tableau HTML il sera remonté 2 fois, puisqu'il prend 2 navettes différentes, l'une pour l'aller et l'autre pour le retour. Donc dans le 1er tableau je vais récupérer DATE_RESERVATION et dans l'autre l'heure de NAVETTE_RETOUR.

                    Mon code est correct, c'est juste que je n'arrive pas à remonter ou plutôt à trier avec une seule et même requête le résultat final.

                    [EDIT 2] : Voici le tableau qui remonte bien l'affiche de Pierre, (j'avais eu un petit soucis de mon côté, mais là tout va bien) et  comme tu peux le voir les heures ne sont pas triés correctement :

                    -
                    Edité par Guillaumedu15 16 février 2021 à 12:33:34

                    • Partager sur Facebook
                    • Partager sur Twitter
                      16 février 2021 à 14:47:47

                      Je ne vois plus où "0" entre en ligne de compte là. Désolé, je ne comprends pas ce que tu veux faire/obtenir.

                      > à trier avec une seule et même requête

                      Quel est ton code ? On y verrait peut être plus clair avec ?

                      ORDER BY HEURE_NAVETTE_RETOUR, DATE_RESERVATION ?

                      WHERE HEURE_NAVETTE_RETOUR <> "0" ... ORDER BY DATE_RESERVATION ?

                      -
                      Edité par julp 16 février 2021 à 17:25:44

                      • Partager sur Facebook
                      • Partager sur Twitter
                        16 février 2021 à 19:56:22

                        Ok, je vais la refaire et tu sais quoi, on va se préoccuper d'un seul tableau sur les 2 que j'affiche sur ma page, ça sera plus simple.

                        Je cherche à récupérer en 1 seule requête un résultat selon différentes descentes et différents stationnement sur le parcours (début, milieu et fin, respectivement EYG, LP, GV).

                        Pour ce faire, j'utilise actuellement ce snippet :

                            $navette_aujourdhui__LP_EYG = $bdd->prepare('SELECT * FROM wp_ficheClients 
                              WHERE DATE_RESERVATION 
                              BETWEEN "2021-02-08 00:00:00" AND "2021-02-08 23:59:59" AND A_PAYE = 1
                              ORDER BY DATE_RESERVATION ASC');
                            $navette_aujourdhui__LP_EYG->execute();


                        Ensuite, j'ai mon while qui récupère les différentes colonnes du SELECT.

                        Je check si NAVETTE_RETOUR != "0" et ensuite je check si :

                        - La descente est EYG -> GV où la personne est garée à EYG => navette pour retour au début

                        La descente est EYG -> GV où la personne est garée à LP => navette pour retour au milieu

                        - La descente est EYG -> LP où la personne est garée à EYG => navette pour retour au début


                        Ensuite, je check si NAVETTE_RETOUR == "0" et ensuite je check si :

                        - La descente est EYG -> LP où la personne est garée à LP => navette pour commencer la descente

                        - La descente est EYG -> GV où la personne est garée à GV => pareil


                        Comme je l'ai dit précédemment : 

                        NAVETTE_RETOUR == "0" => il n'y a pas de navette, donc le client est garé en bas de la descente.

                        NAVETTE_RETOUR != "0" => un horaire est défini, le client peut être garé soit au milieu soit au début d'une descente.


                        Voici mon code avec les "if" et "elseif" pour la génération à la volée du tableau :

                            <!-- 1er tableau -->
                            <div style="overflow-x:auto; width:49%" class="tableaux">
                                <table id="myTable">
                                    <thead>
                                        <tr>
                                          <td colspan="11"><center>NAVETTE LE PORT -> ENTRAYGUES</center></td>
                                          <tr>
                                          <th scope="col"><center>Horaires</center></th>
                                          <th scope="col"><center>Nom</center></th>
                                          <th scope="col"><center>Prénom</center></th>
                                          <th scope="col"><center>Personnes</center></th>
                        
                                          <th scope="col"><center>KO</center></th> 
                                          <th scope="col"><center>C2</center></th> 
                                          <th scope="col"><center>C3</center></th> 
                                          <th scope="col"><center>C4</center></th>
                                          <th scope="col"><center>KF</center></th>
                                          <th scope="col"><center>RAFT</center></th>
                                          <th scope="col"><center>PADDLE</center></th>            
                                        </tr>
                                    </thead>
                                    <tbody id="myBody">           
                                    <?php
                                      //on affiche les datas de chaque client d'aujourd'huisauf ceux qui se font la desc
                                      while ($navette__LP_EYG = $navette_aujourdhui__LP_EYG->fetch(PDO::FETCH_ASSOC))
                                      {
                        
                                        //on check si l'heure la navette retour est différent de 0 ou NULL et qu'il se gare au début de sa descente, on prend en compte l'heure de la navette retour
                                        if($navette__LP_EYG["HEURE_NAVETTE_RETOUR"] != "0" && $navette__LP_EYG["DESCENTE"] == "EYG -> GV (20 km)" && $navette__LP_EYG["STATIONNEMENT"] == "Entraygues")
                                        {
                                    ?>
                                        <tr>
                                          <!-- HEURE CLIENT -->
                                          <td><?= date("H:i", strtotime("+30 minutes", strtotime($navette__LP_EYG["HEURE_NAVETTE_RETOUR"]))); ?></td>
                        
                        
                                          <!--NOM -->
                                          <td><?= $navette__LP_EYG["NOM"] ?></td>
                        
                        
                                          <!--PRENOM -->
                                          <td><?= $navette__LP_EYG["PRENOM"] ?></td>
                        
                        
                                          <!--TOTAL DE PERSONNE (adultes + enfants)-->
                                          <td><?= $navette__LP_EYG["NOMBRE_TOTAL_PERSONNES"] ?></td>
                        
                        
                                          <!--TYPE DE BATEAUX -->           
                                          <td><?= $navette__LP_EYG["KO"] ?></td>
                                          <td><?= $navette__LP_EYG["C2"] ?></td>
                                          <td><?= $navette__LP_EYG["C3"] ?></td>
                                          <td><?= $navette__LP_EYG["C4"] ?></td>
                                          <td><?= $navette__LP_EYG["KF"] ?></td>
                                          <td><?= $navette__LP_EYG["RAFT"] ?></td>
                                          <td><?= $navette__LP_EYG["PADDLE"] ?></td>
                                        </tr>
                                    <?php 
                                        }
                        
                                        //on check si l'heure de la navette retour est différente de 0 et qu'il se gare au milieu de la Grande descente,                
                                        //on prend en compte l'heure de départ de la réservation dans fiche client et (l'heure de fin de réservation [ modifiée dans le suivi client ] dans le 2nd tableau)
                                        elseif($navette__LP_EYG["HEURE_NAVETTE_RETOUR"] != "0" && $navette__LP_EYG["DESCENTE"] == "EYG -> GV (20 km)" && $navette__LP_EYG["STATIONNEMENT"] == "Le Port")
                                        {
                                          //on ajoute pas 30 min au client dans ce cas là, on récupère juste l'heure de réservation de la fiche client
                                    ?>
                        
                                        <tr>                      
                                          <!-- HEURE CLIENT -->
                                          <td><?= date("H:i", strtotime($navette__LP_EYG["DATE_RESERVATION"])); ?></td>
                        
                        
                                          <!--NOM -->
                                          <td><?= $navette__LP_EYG["NOM"] ?></td>
                        
                        
                                          <!--PRENOM -->
                                          <td><?= $navette__LP_EYG["PRENOM"] ?></td>
                        
                        
                                          <!--TOTAL DE PERSONNE (adultes + enfants)-->
                                          <td><?= $navette__LP_EYG["NOMBRE_TOTAL_PERSONNES"] ?></td>
                        
                        
                                          <!--TYPE DE BATEAUX -->           
                                          <td><?= $navette__LP_EYG["KO"] ?></td>
                                          <td><?= $navette__LP_EYG["C2"] ?></td>
                                          <td><?= $navette__LP_EYG["C3"] ?></td>
                                          <td><?= $navette__LP_EYG["C4"] ?></td>
                                          <td><?= $navette__LP_EYG["KF"] ?></td>
                                          <td><?= $navette__LP_EYG["RAFT"] ?></td>
                                          <td><?= $navette__LP_EYG["PADDLE"] ?></td>
                                        </tr>
                                    <?php
                                       }
                                      
                        
                                        //on check si l'heure la navette retour est différente de 0 et qu'il se gare à la fin de sa descente, on prend en compte l'heure de la réservation
                                        elseif($navette__LP_EYG["HEURE_NAVETTE_RETOUR"] == "0" && $navette__LP_EYG["DESCENTE"] == "EYG -> GV (20 km)" && $navette__LP_EYG["STATIONNEMENT"] == "Grand-Vabre")
                                        {
                                    ?>
                        
                                        <tr>                      
                                          <!-- HEURE CLIENT -->
                                          <td><?= date("H:i", strtotime("+30 minutes", strtotime($navette__LP_EYG["DATE_RESERVATION"]))); ?></td>
                        
                        
                                          <!--NOM -->
                                          <td><?= $navette__LP_EYG["NOM"] ?></td>
                        
                        
                                          <!--PRENOM -->
                                          <td><?= $navette__LP_EYG["PRENOM"] ?></td>
                        
                        
                                          <!--TOTAL DE PERSONNE (adultes + enfants)-->
                                          <td><?= $navette__LP_EYG["NOMBRE_TOTAL_PERSONNES"] ?></td>
                        
                        
                                          <!--TYPE DE BATEAUX -->           
                                          <td><?= $navette__LP_EYG["KO"] ?></td>
                                          <td><?= $navette__LP_EYG["C2"] ?></td>
                                          <td><?= $navette__LP_EYG["C3"] ?></td>
                                          <td><?= $navette__LP_EYG["C4"] ?></td>
                                          <td><?= $navette__LP_EYG["KF"] ?></td>
                                          <td><?= $navette__LP_EYG["RAFT"] ?></td>
                                          <td><?= $navette__LP_EYG["PADDLE"] ?></td>
                                        </tr>
                                    <?php
                                        }
                        
                                        //on check si l'heure la navette retour est différente de 0 et qu'il se gare à la fin de sa descente, on prend en compte l'heure de la réservation
                                        elseif($navette__LP_EYG["HEURE_NAVETTE_RETOUR"] != "0" && $navette__LP_EYG["DESCENTE"] == "EYG -> LP (10 km)" && $navette__LP_EYG["STATIONNEMENT"] == "Entraygues")
                                        {
                                    ?>
                                        <tr>                      
                                          <!-- HEURE CLIENT -->
                                          <td><?= date("H:i", strtotime($navette__LP_EYG["HEURE_NAVETTE_RETOUR"])); ?></td>
                        
                        
                                          <!--NOM -->
                                          <td><?= $navette__LP_EYG["NOM"] ?></td>
                        
                        
                                          <!--PRENOM -->
                                          <td><?= $navette__LP_EYG["PRENOM"] ?></td>
                        
                        
                                          <!--TOTAL DE PERSONNE (adultes + enfants)-->
                                          <td><?= $navette__LP_EYG["NOMBRE_TOTAL_PERSONNES"] ?></td>
                        
                        
                                          <!--TYPE DE BATEAUX -->           
                                          <td><?= $navette__LP_EYG["KO"] ?></td>
                                          <td><?= $navette__LP_EYG["C2"] ?></td>
                                          <td><?= $navette__LP_EYG["C3"] ?></td>
                                          <td><?= $navette__LP_EYG["C4"] ?></td>
                                          <td><?= $navette__LP_EYG["KF"] ?></td>
                                          <td><?= $navette__LP_EYG["RAFT"] ?></td>
                                          <td><?= $navette__LP_EYG["PADDLE"] ?></td>
                                        </tr>
                                    <?php
                                        }
                        
                                        //on check si l'heure la navette retour est différente de 0 et qu'il se gare à la fin de sa descente, on prend en compte l'heure de la réservation
                                        elseif($navette__LP_EYG["HEURE_NAVETTE_RETOUR"] == "0" && $navette__LP_EYG["DESCENTE"] == "EYG -> LP (10 km)" && $navette__LP_EYG["STATIONNEMENT"] == "Le Port")
                                        {
                                    ?>
                                        <tr>                      
                                          <!-- HEURE CLIENT -->
                                          <td><?= date("H:i", strtotime($navette__LP_EYG["DATE_RESERVATION"])); ?></td>
                        
                        
                                          <!--NOM -->
                                          <td><?= $navette__LP_EYG["NOM"] ?></td>
                        
                        
                                          <!--PRENOM -->
                                          <td><?= $navette__LP_EYG["PRENOM"] ?></td>
                        
                        
                                          <!--TOTAL DE PERSONNE (adultes + enfants)-->
                                          <td><?= $navette__LP_EYG["NOMBRE_TOTAL_PERSONNES"] ?></td>
                        
                        
                                          <!--TYPE DE BATEAUX -->           
                                          <td><?= $navette__LP_EYG["KO"] ?></td>
                                          <td><?= $navette__LP_EYG["C2"] ?></td>
                                          <td><?= $navette__LP_EYG["C3"] ?></td>
                                          <td><?= $navette__LP_EYG["C4"] ?></td>
                                          <td><?= $navette__LP_EYG["KF"] ?></td>
                                          <td><?= $navette__LP_EYG["RAFT"] ?></td>
                                          <td><?= $navette__LP_EYG["PADDLE"] ?></td>
                                        </tr>
                                    <?php
                                        }
                                      }
                                    ?>
                                </tbody>
                              </table>
                            </div>


                        Donc, en définitive, voici mon phpmyadmin :


                        Et, voici le tableau généré à la volée par mon code :

                        Donc, ici comme tu peux le voir l'heure n'est pas trié par ordre croissante, puisque le "9:00" devrait être en 1ère ligne.


                        Pour résumer, sur le phpmyadmin, là où j'ai mis une flèche, cette ligne n'est pas au bon endroit dans mon tableau, vu qu'elle n'est pas triée avec les autres horaires.


                        Je sais pas si c'est plus claire ? Difficile de faire mieux je pense. :/ Sinon un partage d'écran sur discord et go ;)

                        -
                        Edité par Guillaumedu15 16 février 2021 à 20:05:01

                        • Partager sur Facebook
                        • Partager sur Twitter
                          16 février 2021 à 23:02:18

                          Il faudrait que tu fasses tes calculs d'horaire directement en SQL si tu veux pouvoir trier dessus.

                          Genre :

                          $navette_aujourdhui__LP_EYG = $bdd->prepare(<<<'EOS'
                              SELECT CASE
                                  WHEN HEURE_NAVETTE_RETOUR <> '0' AND DESCENTE = 'EYG -> GV (20 km)' AND STATIONNEMENT = 'Entraygues'
                                      THEN CAST(HEURE_NAVETTE_RETOUR AS TIME) + INTERVAL 30 MINUTE
                                  WHEN HEURE_NAVETTE_RETOUR = '0' AND DESCENTE = 'EYG -> GV (20 km)' AND STATIONNEMENT = 'Grand-Vabre'
                                      THEN TIME(DATE_RESERVATION) + INTERVAL 30 MINUTE
                          WHEN HEURE_NAVETTE_RETOUR <> '0' AND DESCENTE = 'EYG -> GV (20 km)' AND STATIONNEMENT = 'Le Port'
                          THEN TIME(DATE_RESERVATION) WHEN HEURE_NAVETTE_RETOUR <> '0' AND DESCENTE = 'EYG -> LP (10 km)' AND STATIONNEMENT = 'Entraygues' THEN CAST(HEURE_NAVETTE_RETOUR AS TIME) WHEN HEURE_NAVETTE_RETOUR = '0' AND DESCENTE = 'EYG -> LP (10 km)' AND STATIONNEMENT = 'Le Port' THEN TIME(DATE_RESERVATION) END AS horaire, fc.* FROM wp_ficheClients fc WHERE DATE_RESERVATION BETWEEN '2021-02-08 00:00:00' AND '2021-02-08 23:59:59' AND A_PAYE = 1 ORDER BY horaire EOS );

                          Je ne sais pas si c'est la solution que tu attendais mais pour moi c'est la seule solution (si j'ai compris cette fois) pour vraiment avoir un résultat trié comme tu le souhaites (à moins de réaliser l'équivalent par u(a)sort côté PHP après un fetchAll mais ce serait bien moins efficace). Le fait de le faire en partie SELECT te fait économiser les calculs en PHP pouvant réutiliser le résultat du CASE aliasé en horaire plutôt que de le faire directement de manière "jetable" en ORDER BY (surtout si c'est pour refaire la même chose en PHP ensuite).

                          -
                          Edité par julp 18 février 2021 à 18:21:53

                          • Partager sur Facebook
                          • Partager sur Twitter
                            17 février 2021 à 1:31:53

                            Faudrait que je commence par tester cette requête SQL, sauf que j'ai une erreur, il connait pas "fc.*", c'est quoi pour toi "fc.*" ? Par contre, dans ta requête, ça va me sélectionner toutes les colonnes ? Car je vois pas le "*" (astérisque) 🤔. 

                            Et oui, je pense que le calcul dans la requête serait plus facile et plus optimiser, merci pour ce conseil. 🙂

                            Et c'est quoi "<<<'EOS'", j'ai jamais vu ça 🤨.


                            Merci

                            -
                            Edité par Guillaumedu15 17 février 2021 à 1:32:54

                            • Partager sur Facebook
                            • Partager sur Twitter
                              17 février 2021 à 1:48:11

                              J'avais oublié l'alias fc sur la table.

                              Pour le EOS, c'est la syntaxe nowdoc

                              • Partager sur Facebook
                              • Partager sur Twitter
                                17 février 2021 à 12:23:20

                                Bonjour,

                                Déplacement vers un forum plus approprié

                                Le sujet est déplacé de la section PHP vers la section Base de données

                                • Partager sur Facebook
                                • Partager sur Twitter
                                Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                                  17 février 2021 à 14:31:34

                                  On frôle l'au-dessus de l'excellence 😂 !

                                  Merci beaucoup à toi Julp 😁, je n'aurais jamais trouvé tout seul sans y passer des jours et des jours. Ca correspond parfaitement à ce que je voulais, voici le résultat pour ceux qui chercherait à faire quelque chose de similaire :

                                  Cependant je n'ai pas compris pourquoi tu utilises le Nowdoc ? On en a pas besoin ici. 🤔 Pourrais-tu m'expliquer ?

                                  Perso, je ne l'ai pas mis dans ma requête vu que j'utilise simplemnt du SQL en "dur" sans passer des variables ou quoi que ce soit d'autres.

                                  Merci d'avance !

                                  -
                                  Edité par Guillaumedu15 17 février 2021 à 14:32:50

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    17 février 2021 à 14:59:02

                                    Je n'aurais jamais pu l'écrire sans le code PHP xD

                                    > Cependant je n'ai pas compris pourquoi tu utilises le Nowdoc ? On en a pas besoin ici. 🤔 Pourrais-tu m'expliquer ?

                                    C'est une syntaxe alternative pour écrire une chaîne de caractères en PHP, ce n'est pas une obligation. J'aime à l'utiliser sur les requêtes préparées parce que :

                                    • ça "évite" de mettre des variables dans la requête (vu que la syntaxe nowdoc agit comme les ', les variables ne sont pas substituées/restent littérales)
                                    • s'il y a des quotes dans la requête, ça évite d'avoir à échapper dans tous les sens
                                    • (le tout est plus lisible)

                                    Après, c'est toi qui voit, avec des ' ou des ", ça marchera et est tout autant valable.

                                    -
                                    Edité par julp 17 février 2021 à 15:13:03

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      17 février 2021 à 15:46:05

                                      Ca marche la prochaine fois je te mets le code directement dans mon 1er post 😂😝.

                                      Merci pour ton explication claire et précise 😉. J'utilise toujours des simples quotes pour englober ma requête, et du coup, si y a des strings dans ma requête alors j'utilise des doubles quotes pour les strings.

                                      -
                                      Edité par Guillaumedu15 17 février 2021 à 15:46:18

                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      [SQL] Faire un if sur ce que contient 2 colonnes

                                      × 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