Menu

Problème SQL - ORDER BY et GROUP BY [Résolu]

matmat8888 26 Messages postés lundi 22 mai 2017Date d'inscription 18 janvier 2018 Dernière intervention - 6 juil. 2017 à 11:47 - Dernière réponse : matmat8888 26 Messages postés lundi 22 mai 2017Date d'inscription 18 janvier 2018 Dernière intervention
- 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


Afficher la suite 

4 réponses

Répondre au sujet
jordane45 20568 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 21 avril 2018 Dernière intervention - 6 juil. 2017 à 14:47
+1
Utile
3
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
Cette réponse vous a-t-elle aidé ?  
matmat8888 26 Messages postés lundi 22 mai 2017Date d'inscription 18 janvier 2018 Dernière intervention - 6 juil. 2017 à 15:59
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
jordane45 20568 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 21 avril 2018 Dernière intervention > matmat8888 26 Messages postés lundi 22 mai 2017Date d'inscription 18 janvier 2018 Dernière intervention - 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 : http://www.commentcamarche.net/faq/46512-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 : http://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
matmat8888 26 Messages postés lundi 22 mai 2017Date d'inscription 18 janvier 2018 Dernière intervention > jordane45 20568 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 21 avril 2018 Dernière intervention - 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 !
Commenter la réponse de jordane45