Problème SQL - ORDER BY et GROUP BY

Résolu/Fermé
matmat8888 Messages postés 33 Date d'inscription lundi 22 mai 2017 Statut Membre Dernière intervention 12 mars 2019 - Modifié le 6 juil. 2017 à 14:46
matmat8888 Messages postés 33 Date d'inscription lundi 22 mai 2017 Statut Membre Dernière intervention 12 mars 2019 - 6 juil. 2017 à 17:38
Bonjour à tous !

Bon je suis de retour avec deux nouvelles questions que je n'arrive pas à résoudre :(

Je compte sur vous pour m'aider du coup !

Voilà en gros j'ai créé un planning de location de vélos et le but c'est d'afficher les tâches à effectuer par dates...

Mes 2 soucis :

1) mes commandes s'affichent plusieurs fois, par exemple si le client book 2 vélos et 2 casques alors la commande va s'afficher 4 fois... J'ai essayé un GROUP BY t1.id qui marche super bien dans phpmyadmin mais quand je fais un C/C dans mon planning.php plus rien ne s'affiche :(

2) pour le moment mon ORDER BY se fait sur t1.debut alors je n'ai pas le résultat que je voudrais...

En réalité je voudrais un ORDER BY sur la date de debut sauf si la date de début <= CURDATE( ) et dans ce cas je veux considérer la date de fin...

Voici mon code pour le moment merci pour votre aide ! :)
$q='SELECT t1.id,t1.debut,t1.heure_debut,t1.prix,t1.fin,t1.statut,t1.paiement, t1.caution,t1.heure_fin,t2.prenom,t2.nom, t2.telephone,t2.mail, t3.id_vehicule, t4.nom as vehicule FROM `location` t1

      

      left join client t2 on t2.id = t1.id_client 

      left join location_vehicule t3 on t3.id_location = t1.id 

      left join vehicule t4 on t4.id = t3.id_vehicule 

      left join location_accessoire t5 on t5.id_location = t1.id 

      left join accessoire t6 on t6.id = t5.id_accessoire

      ';

      if( !($_GET['all']))
      $q=$q." WHERE t1.fin >= CURDATE( ) ";
      $q=$q." ORDER BY t1.debut, t1.fin ";
      
      $req = $bdd ->query($q);
      while($loca = $req->fetch())
     {
      $q2='SELECT t2.nom as vehicule FROM `location_vehicule` t1
      left join vehicule t2 on t2.id = t1.id_vehicule 
      WHERE t1.id_location='.$loca['id'];
       
      $req2 = $bdd ->query($q2);
      
      $q3='SELECT t2.nom as accessoire FROM `location_accessoire` t1
      left join accessoire t2 on t2.id = t1.id_accessoire
      WHERE t1.id_location='.$loca['id'];
       
      $req3 = $bdd ->query($q3);



EDIT : Ajout des balises de code (la coloration syntaxique).

Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.
Jordane45


A voir également:

1 réponse

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
6 juil. 2017 à 14:47
Bonjour,

Si ça marche dans phplyadmin .. c'est un souci coté php et non sql ... donc je déplace dans le forum PHP.

Ensuite.. fais donc un echo de ta variable $q3 et regarde ce que ça donne.
Puis colle ce résultat dans phpmyadmin et regarde si ça marche
1
matmat8888 Messages postés 33 Date d'inscription lundi 22 mai 2017 Statut Membre Dernière intervention 12 mars 2019
Modifié le 6 juil. 2017 à 16:37
Bonjour Jordane,
merci pour ta réponse, alors oui mon point 1) c'est du php mais mon point 2) du sql...

J'ai essayé le echo de q et il m'affiche rien dans php alors que dans myphpadmin c'est nickel !

Ce code me renvoie bien le même résultat que dans phpmyadmin mais lorsque j'ajoute un GROUP BY t1.id après mes left join de $q mon php ne m'affiche plus rien et pourtant le echo de $q marche très bien dans mysql...

Une idée ?? :)
<?php
session_start();
if (isset($_SESSION['lang'])) 
{
 include 'lang.php';
}
include "connexion.php";
?>
<html>
 <head>
  <?php include "shared/head.php"; ?>
  <?php require("lang.php");?>
  <title><?php echo _TITLE_P; ?></title>
  <meta name="description" content="<?php echo _DESCRIPTION_P; ?>"/>
 </head>
 <body>
  <div class="page-wrapper">
   <?php include "shared/header.php"; ?>
   <div class="catalogue-container">
    <div class="row large-8">
     <h3 class="big-title-services text-center"><?php echo _PLANNING; ?></h3><br>
     <?php
     
      setlocale(LC_TIME, "fr_FR");
      $q='SELECT t1.id,t1.debut,t1.heure_debut,t1.prix,t1.fin,t1.statut,t1.paiement, t1.caution,t1.heure_fin,t2.prenom,t2.nom, t2.telephone,t2.mail, t3.id_vehicule, t4.nom as vehicule FROM `location` t1

      

      left join client t2 on t2.id = t1.id_client 

      left join location_vehicule t3 on t3.id_location = t1.id 

      left join vehicule t4 on t4.id = t3.id_vehicule 

      left join location_accessoire t5 on t5.id_location = t1.id 

      left join accessoire t6 on t6.id = t5.id_accessoire

      ';

      if( !($_GET['all']))
      $q=$q." WHERE t1.fin >= CURDATE( ) ";
      $q=$q." ORDER BY t1.debut, t1.fin ";

      $req = $bdd ->query($q);
      while($loca = $req->fetch())
     {
      $q2='SELECT t2.nom as vehicule FROM `location_vehicule` t1
      left join vehicule t2 on t2.id = t1.id_vehicule 
      WHERE t1.id_location='.$loca['id'];
       
      $req2 = $bdd ->query($q2);
      
      $q3='SELECT t2.nom as accessoire FROM `location_accessoire` t1
      left join accessoire t2 on t2.id = t1.id_accessoire
      WHERE t1.id_location='.$loca['id'];

      $req3 = $bdd ->query($q3);

     echo "<b>Commande ".$loca['id']." - ".$loca['prenom']." ".$loca['nom']." - ".$loca['prix']."€</b><br/>";
     echo "Du ". strftime("%A %d %B %Y", strtotime($loca['debut']))." ";
     echo strftime("%H:%M", strtotime($loca['heure_debut']));
     echo '<br/>';
     
     
     echo "Au ".strftime("%A %d %B %Y", strtotime($loca['fin']))." ";
     echo strftime("%H:%M", strtotime($loca['heure_fin']));
     echo '<br/>';
     
      echo "Véhicule(s) : <b>";
     while($loca2 = $req2->fetch()){
        echo $loca2['vehicule']." ";
      }echo '</b><br/>';

      echo "Accessoire(s) : <b>";
     while($loca3 = $req3->fetch()){
        echo $loca3['accessoire']." ";
      }echo '</b><br/>';

     
     echo 'statut : <select onchange="update(this,\'statut\','.$loca['id'].')" style="width:150px" >';
     echo '<option value="confirmee" '.($loca['statut']=="confirmee"?"selected":"").'>confirmee</option>';
     echo '<option value="en attente" '.($loca['statut']=="en attente"?"selected":"").'>en attente</option>';
     echo '<option value="annulee" '.($loca['statut']=="annulee"?"selected":"").'>annulee</option>';
     // echo '<option value="" '.($loca['statut']==""?"selected":"").'>Inconnu</option>';
     echo '</select><br/>';

     $field="paiement";
     echo 'paiement : <select onchange="update(this,\'paiement\','.$loca['id'].')" style="width:150px" >';
     echo '<option value="en attente" '.($loca[$field]=="en attente"?"selected":"").'>en attente</option>';
     echo '<option value="cash" '.($loca[$field]=="cash"?"selected":"").'>cash</option>';
     echo '<option value="cheque" '.($loca[$field]=="cheque"?"selected":"").'>cheque</option>';
     echo '<option value="vb" '.($loca[$field]=="vb"?"selected":"").'>vb</option>';
     echo '<option value="cb" '.($loca[$field]=="cb"?"selected":"").'>cb</option>';
     echo '<option value="paypal" '.($loca[$field]=="paypal"?"selected":"").'>paypal</option>';
     // echo '<option value="" '.($loca[$field]==""?"selected":"").'>Inconnu</option>';
     echo '</select><br/>';

     $field="caution";
     echo 'caution : <select onchange="update(this,\'caution\','.$loca['id'].')" style="width:150px" >';
     echo '<option value="en attente" '.($loca[$field]=="en attente"?"selected":"").'>en attente</option>';
     echo '<option value="cb" '.($loca[$field]=="cb"?"selected":"").'>cb</option>';
     echo '<option value="cheque" '.($loca[$field]=="cheque"?"selected":"").'>cheque</option>';
     echo '<option value="cash" '.($loca[$field]=="cash"?"selected":"").'>cash</option>';
     echo '<option value="id" '.($loca[$field]=="id"?"selected":"").'>id</option>';
     // echo '<option value="" '.($loca[$field]==""?"selected":"").'>Inconnu</option>';
     echo '</select><br/>';


     echo "Téléphone : ". $loca['telephone']."<br/>";
     echo "Email : ". $loca['mail']."<br/>";

     echo '<br/><hr/>';
     }
     ?>
     <br/><br/>
<script>
function loadScript(url) {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
     // document.getElementById("demo").innerHTML =
     // this.responseText;
    }
  };
  xhttp.open("GET",url, true);
  xhttp.send();
}


var update=function(thi,field,id){
 console.log("field",field,id, thi.value);
 var url= "updateFields.php?field="+field+"&id="+id+"&value="+thi.value;
 loadScript(url);
}
</script>
    </div>
   </div>
  </div>
  <?php include "shared/footer.php"; ?>
 </body>
</html>


EDIT : Ajout des balises de code (la coloration syntaxique).

Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.
Jordane45
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > matmat8888 Messages postés 33 Date d'inscription lundi 22 mai 2017 Statut Membre Dernière intervention 12 mars 2019
6 juil. 2017 à 16:40
Peux tu nous montrer ton code avec tes echo ??

Et aussi comment se nomme la page que tu nous montres ?

Enfin... tu sembles utiliser PDO.
Je t'invites donc à mettre en pratique ceci : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs


Et pour finir :
NB : Pour poster du code sur le forum.. merci d'utiliser la coloration syntaxique (les balises de code).
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
0
matmat8888 Messages postés 33 Date d'inscription lundi 22 mai 2017 Statut Membre Dernière intervention 12 mars 2019 > jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024
6 juil. 2017 à 17:38
bonjour jordane, pour le point php finalement j'ai réglé ça en affichant seulement la commande si le numéro de commande est différent du dernier numéro de commande affiché. Je vais donc terminer le sujet et créer un autre pour mon sql merci !
0