Simplifier une requete

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Simplifier une requete

Re: Simplifier une requete

par moogli » 06 déc. 2016, 09:28

salut,

non évite ce genre de chose, il y a beaucoup plus simple.

vu que le code est identique il suffit de savoir ou tu en es dans le nombre de ligne pour créer une nouvelle colonne.
L'opérateur % va te permettre de savoir s'il faut ou non une nouvelle colonne.
<section id="section-3">  
  <div class="col-md-3 col-sm-12">
    <div class="row list_hotels_tabs">
    	<ul>     
        <?php
        $classement_ville = 'SELECT DISTINCT city, id_departements, count(1) as nombre FROM loisirs WHERE date_fin_sortie >= NOW() AND valide = 1 GROUP BY city ORDER BY nombre DESC LIMIT 0,30';
        $req = $bdd->query($classement_ville);
        $i = 1;
        if($req->rowCount() > 0) {             
          while($ligne = $req->fetch(PDO::FETCH_ASSOC)){
            if($i%10 === 0) {
              echo '<ul></div></div><div class="col-md-3 col-sm-12"><div class="row list_hotels_tabs"><ul>';
            }
            echo '<li>' , $ligne['city'] , ' -  ' , $ligne['nombre'] , '</li>';
            $i++;
          }  	
         }
         ?>
         </ul>
     </div>
  </div>
</section>
taille du code divisé 3 (en gros) et requête SQL un poil moins gourmande (count(1) plutôt que count(*) mais ça tu le verras pas trop ;) ).

Cette solution est la plus courante et permet de façon simple d'organiser une "césure" et d'avoir un affichage en plusieurs section sans dupliquer le code.
si tu veux modifier les colonnes tu peux même sortir en variable les classes css et le diviseur du modulo pour rendre le truc configurable de façon simple :)

@+

Re: Simplifier une requete

par yoann38 » 04 déc. 2016, 21:44

Bonjour,
J'ai donc ma premiere requete ainsi:
<?php
						$i = 0;
                        $classement_ville = " SELECT DISTINCT city, id_departements,id_region, count(*) as nombre FROM loisirs WHERE date_fin_sortie >= NOW() AND valide = 1 GROUP BY city ORDER BY nombre DESC LIMIT 10,10";
                        $req = $bdd->query($classement_ville);
                             
                        if($req->rowCount() > 0) {             
                        while($ligne = $req->fetch(PDO::FETCH_ASSOC)){ 
                                    
                         echo '<li><div class="col-md-6"><a href="sortie/region-'.simplification($aRegion[$ligne['id_region']]).'/ville-de-'.simplification($ligne['city']).'.html">'.ucfirst(strtolower($ligne['city'])).' </a></div><div class="col-md-6"><span class="badge">'.$ligne['nombre'].'</span></div></li>';  
                             } 	
                           }
                         ?>
et au lieu de ma deuxième requete j'ai donc:
<?php	
						while($ligne = $req->fetch(PDO::FETCH_ASSOC)){ 
						if($i == 10){
							echo $i;
						echo '<li><div class="col-md-6"><a href="sortie/region-'.simplification($aRegion[$ligne['id_region']]).'/ville-de-'.simplification($ligne['city']).'.html">'.ucfirst(strtolower($ligne['city'])).' </a></div><div class="col-md-6"><span class="badge">'.$ligne['nombre'].'</span></div></li>';  
                             } 
							 
						}
                         ?>
Rien ne s'affiche même pas un message d'erreur en ce qui concerne la 2 eme partie, le code complet ci dessous:
<div class="col-md-3 col-sm-12">
					<div class="row list_hotels_tabs">
                    	<ul class="list-unstyled">      
                        <?php
						$i = 0;
                        $classement_ville = " SELECT DISTINCT city, id_departements,id_region, count(*) as nombre FROM loisirs WHERE date_fin_sortie >= NOW() AND valide = 1 GROUP BY city ORDER BY nombre DESC LIMIT 10,10";
                        $req = $bdd->query($classement_ville);
                             
                        if($req->rowCount() > 0) {             
                        while($ligne = $req->fetch(PDO::FETCH_ASSOC)){ 
                                    
                         echo '<li><div class="col-md-6"><a href="sortie/region-'.simplification($aRegion[$ligne['id_region']]).'/ville-de-'.simplification($ligne['city']).'.html">'.ucfirst(strtolower($ligne['city'])).' </a></div><div class="col-md-6"><span class="badge">'.$ligne['nombre'].'</span></div></li>';  
                             } 	
                           }
                         ?>
                         </ul>
                     </div>
                    </div>
                    
                    
                    <div class="col-md-3 col-sm-12">
					<div class="row list_hotels_tabs">
                    	<ul class="list-unstyled">      
                        <?php	
						while($ligne = $req->fetch(PDO::FETCH_ASSOC)){ 
						if($i == 10){
							echo $i;
						echo '<li><div class="col-md-6"><a href="sortie/region-'.simplification($aRegion[$ligne['id_region']]).'/ville-de-'.simplification($ligne['city']).'.html">'.ucfirst(strtolower($ligne['city'])).' </a></div><div class="col-md-6"><span class="badge">'.$ligne['nombre'].'</span></div></li>';  
                             } 
							 
						}
                         ?>
                         </ul>
                     </div>
                    </div>

Re: Simplifier une requete

par tof73 » 04 déc. 2016, 21:16

$i = 0;
while(...){
if($i == 10){
echo "...";
}
if($i == 20){
echo "...";
}
$i++;
echo '<li>'.$ligne['city'].' - '.$ligne['nombre'].'</li>';
}

Simplifier une requete

par yoann38 » 04 déc. 2016, 15:50

Salut à tous.
Voilà maitenant mon code fonctionel j'aimerais le simplifier afin de faire que requete et non 3 fois la meme requete si possible
L'idée est d'afficher en gros 10 villes par colonne.

Le code fonctionne ( mais avec 3 requete )
<section id="section-3">
                    
                    <div class="col-md-3 col-sm-12">
					<div class="row list_hotels_tabs">
                    	<ul>     
                        <?php
                        $classement_ville = " SELECT DISTINCT city, id_departements, count(*) as nombre FROM loisirs WHERE date_fin_sortie >= NOW() AND valide = 1 GROUP BY city ORDER BY nombre DESC LIMIT 0,10";
                        $req = $bdd->query($classement_ville);
                             
                        if($req->rowCount() > 0) {             
                        while($ligne = $req->fetch(PDO::FETCH_ASSOC)){ 
                                    
                         echo '<li>'.$ligne['city'].' -  '.$ligne['nombre'].'</li>';  
                             }  	
                           }
                         ?>
                         </ul>
                     </div>
                    </div>
                    
                    <div class="col-md-3 col-sm-12">
					<div class="row list_hotels_tabs">
                    	<ul>     
                        <?php
                        $classement_ville = " SELECT DISTINCT city, id_departements, count(*) as nombre FROM loisirs WHERE date_fin_sortie >= NOW() AND valide = 1 GROUP BY city ORDER BY nombre DESC LIMIT 10,10";
                        $req = $bdd->query($classement_ville);
                             
                        if($req->rowCount() > 0) {             
                        while($ligne = $req->fetch(PDO::FETCH_ASSOC)){ 
                                    
                         echo '<li>'.$ligne['city'].' -  '.$ligne['nombre'].'</li>';  
                             }  	
                           }
                         ?>
                         </ul>
                     </div>
                    </div>
                    
                    
                    <div class="col-md-3 col-sm-12">
					<div class="row list_hotels_tabs">
                    	<ul>     
                        <?php
                        $classement_ville = " SELECT DISTINCT city, id_departements, count(*) as nombre FROM loisirs WHERE date_fin_sortie >= NOW() AND valide = 1 GROUP BY city ORDER BY nombre DESC LIMIT 20,10";
                        $req = $bdd->query($classement_ville);
                             
                        if($req->rowCount() > 0) {             
                        while($ligne = $req->fetch(PDO::FETCH_ASSOC)){ 
                                    
                         echo '<li>'.$ligne['city'].' -  '.$ligne['nombre'].'</li>';  
                             }  	
                           }
                         ?>
                         </ul>
                     </div>
                    </div>
</section>