Plusieurs en un !

Mammouth du PHP | 555 Messages

30 août 2006, 09:57

Bonjour,
Me revoila pour poser une autre question!
Je suis entrain de coder un jeu en ligne gratuit et qui dit jeu dit gourmand et demande optimisation des scripts.
Je voulais savoir si on pouvait mettre plusieurs requètes SQL dans un seul mysql_query.
Exemple si je ne suis pas clair
<?php
//bon je sais il en manque les 3/4 mais c'est juste un exemple
mysql_query("UPDATE membres SET peuple = 'dead', nivat = '0', nivdef = '0' WHERE pseudo = '".$pseudo."'");
mysql_query("DELETE FROM infos WHERE pseudo = '".$pseudo."'");
?>
Executer ces deux requetes (et comment?) avec un seul mysql_query.
(j'ai mis juste deux requètes pour servir d'exemple, ce qui m'interresse surtout c'est la méthode pour gagner pas mal de mysql_query en moins)
Merci beaucoup à tous!
A+ et bon surf!!!!

Mammouth du PHP | 19672 Messages

30 août 2006, 10:35

Non, on peut pas. Enfin en théorie si, il suffit de séparer chaque requête par un ";", mais en pratique, ça va générer plus de problèmes qu'autre chose.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

30 août 2006, 11:29

Dans l'idée, regroupper les mysql_query ne te permettra pas forcément d'augmenter les performances de ton code.

Je pense que la base d'une optimisation doit se passer sur le contenu des requetes. L'exécution d'une requete est toujors beaucoup plus gourmande qu'une initialisation de requete.

Par exemple, je vois que tu cherches les éléments dans les tables à l'aide du pseudo du joueur qui doit être une chaine de caractère. Or la recherche sur un identifiant numérique est beaucoup plus performante.
Ensuite, pense bien à créer des indexs sur les champs qui te servent de critères de tris, de jointures.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

30 août 2006, 13:00

Non, on peut pas. Enfin en théorie si, il suffit de séparer chaque requête par un ";", mais en pratique, ça va générer plus de problèmes qu'autre chose.
Non on ne peut pas
query

Une requête SQL

La chaîne de requête ne doit pas se terminer par un point-virgule.
Justement pour éviter d'en exécuter plusieurs à la fois.

Mammouth du PHP | 555 Messages

30 août 2006, 13:40

Ok merci à tous!
Oui je sais que les chaines de caractères sont plus "gourmandes" que de simples chiffres mais ça m'est beaucoup plus pratique de bosser avec...
Et il n'esxiste pas une autre fonction que mysql_query qui permet l'exécution de plusieurs requètes? (ca sera toujours des connexions d'économisées...)

PS zeus j'aime bien la citation du marteau piqueur :lol:
A+ et bon surf!!!!

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

30 août 2006, 14:11

Oui je sais que les chaines de caractères sont plus "gourmandes" que de simples chiffres mais ça m'est beaucoup plus pratique de bosser avec...
Que tu es créé ton projet avec cette manière de faire, je peut le comprendre. Mais si tu veux réellement optimiser ton programme, c'est le genre de modification très pratique.

Et j'aimerais que tu m'explique en quoi c'est plus pratique avec les pseudos :-k
Et il n'esxiste pas une autre fonction que mysql_query qui permet l'exécution de plusieurs requètes? (ca sera toujours des connexions d'économisées...)
Pas à ma connaissance :(
PS zeus j'aime bien la citation du marteau piqueur :lol:
Notre cher Jean-Claude Van Damme :mrgreen:
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 555 Messages

30 août 2006, 14:37

Bah quand les gens ont un problème (ce qui n'arrive presque jamais avec mes scripts 8) ) ils t'envoient leurs pseudos, pas leur id dans la bdd, et j'ai la flemme d'aller chercher l'id correspondant. La deuxième grande raison c'est que c'est une habitude. Et la troisième c'est qu'il faudrait retapper une bonne partie de mes scripts et que je n'ai pas le temps pour le moment.
Merci à tous, je mets résolu.
A+ et bon surf!!!!

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

30 août 2006, 14:39

Et il n'existe pas une autre fonction que mysql_query
qui permet l'exécution de plusieurs requètes ?
(ca sera toujours des connexions d'économisées...)
Même s'il était possible de lancer plusieurs requêtes simultanément,
il serait préférable de lancer un mysql_query() par requête.
Ça facilite le débuggage...

Et même si cela rajoute une ligne de code à chaque fois (impact négligeable),
je te conseille vivement de procéder ainsi, par étapes :
//
$sql_01 = "SELECT champ1, champ 2 FROM tables WHERE champ3='".$valeur_alpha."'"; // création de la requête SQL
$res_01 = mysql_query($sql_01) or die ("Requête n°1 plantée");                   // exécution de la requête SQL
while ($ligne=mysql_fetch_assoc($res_01))                                        // traitement des résultats
      { //...
En matière d'économies sur l'utilisation de ta BD, ton gain sera meilleur :
  • en limitant les ouvertures/fermetures de connexion mysql_connect() et mysql_close() : un seul par page
  • en optimisant tes requêtes
  • en utilisant des jointures adéquates
  • en évitant les SELECT *
  • ...
PS zeus j'aime bien la citation du marteau piqueur :lol:
Zeus et moi chérissons le même auteur... ;)

Mammouth du PHP | 555 Messages

30 août 2006, 15:16

Ok, c'est pas grave si on utilise jamais mysql_close? ca a un impact sur les perf?
A+ et bon surf!!!!