Signaler

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

Posez votre question matmat8888 17Messages postés lundi 22 mai 2017Date d'inscription 18 juillet 2017 Dernière intervention - Dernière réponse le 6 juil. 2017 à 17:38 par matmat8888
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


Utile
+1
plus moins
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 17Messages postés lundi 22 mai 2017Date d'inscription 18 juillet 2017 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
Répondre
jordane45 18887Messages postés mercredi 22 octobre 2003Date d'inscription ModérateurStatut 19 novembre 2017 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
Répondre
matmat8888 17Messages postés lundi 22 mai 2017Date d'inscription 18 juillet 2017 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 !
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !