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 ?



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

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);
}
$result->close();
$conn->close();
?>


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 !!!

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

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

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);
}
$result->close();


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

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);
}
$result->close();



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

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);
}
$result->close();
$conn->close();
?>


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
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