Requêtes les plus efficaces

Répondre
jackbocar
le 02/09/2007 à 15:53
jackbocar
Bonjour,

J'aimerai savoir sur ces lignes de codes, lesquelles sont les plus efficaces pour afficher une série de départements avec leur nom ?



  1. <h2>D&#233;partements de la r&#233;gion : Franche Comt&eacute; (25 - 39 - 70)</h2>
  2. <?php
  3. $conn = db_connect();
  4. $result = $conn->query("SELECT id, nom, dep FROM commanderies WHERE dep='25' OR dep='39' ORDER BY dep ASC");
  5. while ($obj = $result->fetch_object()) {

  6. printf ('<table border="0" cellpadding="0" cellspacing="0" width="750"class="p"><tr valign="top"><td width="300" align="left" class="style">%s &nbsp; %s</td><td width="300" align="right"><a href="#" class="Lnav" />Top</a></td></tr></table>',$obj->dep, $obj->nom);
  7. }
  8. $result->close();
  9. $conn->close();
  10. ?>


La première requête fait appel à tous les départements avec la clause "OR" en énumération.


Les autres sont classiques, une requête par département.

Qui est le plus rapide, et le moins couteux en ressources ?

A savoir qu'il y a des régions avec 6 ou 7 départements !!!

  1. <h2>D&#233;partements de la r&#233;gion : Franche Comt&eacute; (25 - 39 - 70)</h2>

  2. <?php
  3. $conn = db_connect();
  4. $result = $conn->query("SELECT id, nom, dep FROM commanderies WHERE dep='25' ORDER BY dep ASC");
  5. while ($obj = $result->fetch_object()) {

  6. printf ('<table border="0" cellpadding="0" cellspacing="0" width="750"class="p"><tr valign="top"><td width="300" align="left" class="style">%s &nbsp; %s</td><td width="300" align="right"><a href="#" class="Lnav" />Top</a></td></tr></table>',$obj->dep, $obj->nom);
  7. }
  8. $result->close();


  9. $conn = db_connect();
  10. $result = $conn->query("SELECT id, nom, dep FROM commanderies WHERE dep='39' ORDER BY dep ASC");
  11. while ($obj = $result->fetch_object()) {

  12. printf ('<table border="0" cellpadding="0" cellspacing="0" width="750"class="p"><tr valign="top"><td width="300" align="left" class="style">%s &nbsp; %s</td><td width="300" align="right"><a href="#" class="Lnav" />Top</a></td></tr></table>',$obj->dep, $obj->nom);
  13. }
  14. $result->close();



  15. $conn = db_connect();
  16. $result = $conn->query("SELECT id, nom, dep FROM commanderies WHERE dep='70' ORDER BY dep ASC");
  17. while ($obj = $result->fetch_object()) {

  18. printf ('<table border="0" cellpadding="0" cellspacing="0" width="750"class="p"><tr valign="top"><td width="300" align="left" class="style">%s &nbsp; %s</td><td width="300" align="right"><a href="#" class="Lnav" />Top</a></td></tr></table>',$obj->dep, $obj->nom);
  19. }
  20. $result->close();
  21. $conn->close();
  22. ?>


Merci Jack Bocar
tyberium
le 02/09/2007 à 18:56
tyberium
Bonjour

Moi j aurai fait une table region. Et ajouter un champs région_id à la table commanderies.

comme ca lu les listes WHERE region_id = 1 ORDER BY dep_id ASC

++
jackbocar
le 03/09/2007 à 09:48
jackbocar
Bonjour,

Merci de ta réponse.

Tu penses que l'énumération OR dep='75' etc. n'est pas une bonne solution.

Mais, comment réaliser ma requête avec ce champ region_id, car visiblement, les énumérations sont inévitables ?

Si je veux sortir de ma table tous les noms qui sont dans les départements de la région Provence Alpes Côte d'Azur, ce qui me donne en départements :
( 04 ) . Alpes-de-Haute-Provence
( 05 ) . hautes-Alpes
( 06 ) . Alpes-Maritimes
( 13 ) . Bouches-du-Rhône
( 83 ) . Var
( 84 ) . Vaucluse

Comment je réalise ma requête avec region_id ?

Pour le moment, j'ai cette option :

SELECT nom, dep FROM commanderies WHERE dep='04' OR dep='05' OR dep='06' OR dep='13' OR dep='83' OR dep='84'


Merci de m'éclairer.

Jack Bocar
LupusMic
le 03/09/2007 à 11:29
LupusMic
  1. SELECT id, nom, dep FROM commanderies WHERE dep in('25', '39') ORDER BY dep ASC


Au fait, pourquoi ton champ dep est un varchar et pas un int ?

Et très franchement, si tu as des problèmes de performance, ce ne sera pas à cause du nombre de départements à checker, mais éventuellement parce que dep ne sera pas indexé.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours