Nombre de requete sql

WRInaute impliqué
Bonjour, j'ai une question à propos du nombre de requête sql.

Pour commencer nous avons une table sql avec 10 champs dedans

champ1, champ2, champ3, ... ,champ10

Maintenant imaginons 2 pages php différentes.

Page 1 : (nous avons 2 requêtes dedans)

Code:
$sql1 = Select champ1, champ2 from table;

$sql2 = Select champ3, champ8, champ10 from table;


Page 2 : (nous avons 1 seule requête dedans)

Code:
$sql = Select * from table;

Ma question : Faut-il mieux avoir 2 requêtes qui sélectionnent uniquement les champs nécessaires, ou une seule qui sélectionne tous les champs d'un coup?

En rapidité lequel est la meilleure solution?

Merci
 
WRInaute passionné
Le mieux c'est de faire en une requête et de sélectionner ce dont tu as besoin :
Code:
Select champ1, champ2, champ3, champ8, champ10 from table;
Si tu as besoin de tous les champs alors *.
 
WRInaute impliqué
Non Bacteries, pour des raisons techniques, je suis obligé d'avoir 2 requetes, sinon j'aurais suivis ton idée.

Alors a votre avis, laquel des 2 propositions est la mieux?
 
WRInaute passionné
Oui je vois pas trop là non plus.
Si tu montrais tes vrais requêtes ça serait plus simple, car là la solution que je t'ai proposée est celles qui irait le mieux.
 
WRInaute accro
C'est clair qu'on dirait qu'il y a comme un quiproquo :lol:
sff a dit:
Ma question : Faut-il mieux avoir 2 requêtes qui sélectionnent uniquement les champs nécessaires, ou une seule qui sélectionne tous les champs d'un coup?
sff a dit:
Non Bacteries, pour des raisons techniques, je suis obligé d'avoir 2 requetes, sinon j'aurais suivis ton idée.

Alors a votre avis, laquel des 2 propositions est la mieux?

Comme conseillé plus haut regrouper les deux requêtes en une est plus rapide puisque tu n'interrogera qu'une seule fois la base de données tout en ayant la possibilité d'utiliser les résultats à plusieurs reprises sinon tu peux voir pour faire des jonctions de requêtes si cela te convient mieux.

@+
 
WRInaute impliqué
suite

Non en fait c'est plus compliqué que ca. J'ai du faire une image pour que ca soit compréhensible :

sanstitremj2.jpg


Dans l'exemple 1, on récupère via une include et des global, la seule requete $sql pour s'en servir dans les 3 pages. La requete sélectionne tous les champs d'un coup que ca fonctionne dans les 3 pages

Dans l'exemple 2, dans chaque page il y a une requete qui selectionne uniquement le champ nécéssaire. Chaque page fonctionne avec sa propre requete.

Alors d'après vous qu'elle est la meilleure solution?

Une requete unique pour plusieurs page avec un (*) ou plusieurs requete qui sélectionnent juste le nécéssaire?
 
WRInaute accro
Re,
Je ne comprend pas, désolé :)
Les valeurs des différents "champ" te sont donné par ta requête globale quelle est l'intérêt d'en faire une nouvelle ?

Tu devrais mettre le bout de code plutôt.
 
WRInaute impliqué
suite

Si je te donne le code réel, tu comprendra encore moins.

Pourtant avec l'image c'est pas compliqué.
Les valeurs des différents "champ" te sont donné par ta requête globale quelle est l'intérêt d'en faire une nouvelle ?

Parce que dans l'exemple 1, la requête globale sélectionne tous les champs, et par conséquent des champs inutile. Par exemple la page 3 à besoin uniquement du champ 3 pour fonctionner, et pourtant la requete globale sélectionne tous les champs. Donc en terme d'optimisation j'aimerais savoir si c'est pas mieux d'avoir une requete par page, qui sélectionne juste les champs dont la page a besoin, au lieu de tout prendre d'un coup avec une variable globale.

C'est tellement simple pourtant à comprendre.
 
WRInaute accro
Meeeeeeeeeeeuuuuuuuuuhhhh non c'est pas simple, depuis le début alors qu'on te conseille de ne faire qu'une requête tu nous dis que t'as besoin de deux requêtes, si t'as besoin que de la courte t'exécutes pas l'autre, et pi c'est tout ! Et là, c'est simple :lol:
 
WRInaute impliqué
Suite

C'est à mon tour de pas te comprendre lol.

Donc toi te me conseil plusieurs petite requêtes qui sélectionne uniquement les champs nécessaire, qu'une grande qui sélectionne tout d'un coup ?
 
WRInaute accro
Re,
Si t'as besoin que d'un champ sur chaque page et donc que d'une requête pour l'affichage de ta page oui, par contre normalement si t'as besoin de la grosse qui te récupères tous les champs alors t'as plus besoin de la petite ;)
Du moins ça c'est avec juste tes 2 requêtes comme infos
Code:
$sql1 = Select champ1, champ2 from table;
$sql2 = Select champ3, champ8, champ10 from table;

Si tu nous donnes les vraies (et surtout leurs "where and or") quelqu'un pourra peut-être t'aider plus facilement.

J'ai édité pour expliquer plus clairement mon point de vue
Ce que j'ai compris c'est que tu a mis $sql = Select * from table; et $sql1 = Select champ1 from table; dans deux fonctions que tu appelles depuis une page include
avec pour la page 1uniquement
Code:
 $sql = Select * from table; (fonction dans page include)
et pour la page 2
Code:
$sql1 = Select champ1 from table; (fonction dans page include)
et
$sql2 = Select champ2 from table; (fonction dans la page 2)
Ces deux dernières requêtes peuvent tout aussi bien être unifiées dans la page include puisque quand tu appelles la fonction unifiée, tu peut mettre les valeurs que tu veux à la place de champ2 par exemple dans une fonction qui exécute la requête suivante
Code:
$sql1 = Select champ1, $champ from table; (fonction dans page include)
Cette fonction sera appelée par toutes les pages qui n'ont pas besoin de $sql et qui attribueront la valeur $champ.
@+
 
WRInaute impliqué
suite

Non tu as mal compris mon problème, c'est beaucoup plus simple que ca.

Oublis le début du post, et regarde uniquement ceci.

Exemple 1 (une seule requête principale) :

Page0.php :

Code:
$tablequery = doquery("SELECT * FROM {{table}} WHERE id='1' AND password='1'", "table");
$tablerow = mysql_fetch_assoc($userquery);

function fonction0() {

global $tablerow;

//Dans cette fonction on à besoin du champ1 de la table sql

}


Page1.php :


Code:
include('page0.php');

function fonction1() {

global $tablerow;

//Dans cette fonction on à besoin du champ2 de la table sql

}


Page2.php :


Code:
include('page0.php');

function fonction2() {

global $tablerow;

//Dans cette fonction on à besoin du champ3 de la table sql

}

-------------------------------------------------------------------

Exemple 2 (3 requêtes - une dans chaque page) :

Page0.php :

Code:
$tablequery0 = doquery("SELECT champ1 FROM {{table}} WHERE id='1' AND password='1'", "table");
$tablerow0 = mysql_fetch_assoc($userquery0);

function fonction0() {

global $tablerow0;

//Dans cette fonction on à besoin du champ1 de la table sql

}


Page1.php :


Code:
include('page0.php'); //J'inclus quand même la page pour des raisons technique, mais je me sers cette fois ci pas de la requête de la page0.php

$tablequery1 = doquery("SELECT champ2 FROM {{table}} WHERE id='1' AND password='1'", "table");
$tablerow1 = mysql_fetch_assoc($userquery1);

function fonction1() {

global $tablerow1;

//Dans cette fonction on à besoin du champ2 de la table sql

}


Page2.php :


Code:
include('page0.php'); //J'inclus quand même la page pour des raisons technique, mais je me sers cette fois ci pas de la requête de la page0.php

$tablequery2 = doquery("SELECT champ3 FROM {{table}} WHERE id='1' AND password='1'", "table");
$tablerow2 = mysql_fetch_assoc($userquery2);

function fonction2() {

global $tablerow2;

//Dans cette fonction on à besoin du champ3 de la table sql

}

Je peux pas faire plus simple que ca.
 
WRInaute accro
Re,

Je visualise pas très bien mais je vais te donner ma vision, peut-être qu'elle s'adaptera à ce que tu veux faire.

Dans chaque page
Code:
$champ = "$_GET"; //N° de champ récupéré depuis une variable par exemple
function fonction($champ) //appel de la fonction
Dans ta page que tu inclues dans toutes les autres.
Code:
function fonction($champ) { //on récupère le nom du champ

$tablequery = doquery("SELECT $champ FROM {{table}} WHERE id='1' AND password='1'", "table"); //requete commune
$tablerow = mysql_fetch_assoc($userquery);
global $tablerow; 
}

Sinon comme précisé plus haut ton exemple 2 est plus léger mais tout dépend en fait du contenu des fonctions.
@+
 
WRInaute passionné
Je trouve l'exemple 1 plus léger, il y a une seule requête (plus lourde certes). Mais il est préférable de faire une requête que deux.

La solution de serval2a me semble quand même plus pratique et péreine. A voir si ça peut coller avec tes besoins.
 
Discussions similaires
Haut