Page 1 sur 1

Plusieurs en un !

Posté : 30 août 2006, 09:57
par cicom
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!

Posté : 30 août 2006, 10:35
par Cyrano
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.

Posté : 30 août 2006, 11:29
par zeus
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.

Posté : 30 août 2006, 13:00
par ouckileou
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.

Posté : 30 août 2006, 13:40
par cicom
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:

Posté : 30 août 2006, 14:11
par zeus
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:

Posté : 30 août 2006, 14:37
par cicom
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.

Posté : 30 août 2006, 14:39
par albat
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... ;)

Posté : 30 août 2006, 15:16
par cicom
Ok, c'est pas grave si on utilise jamais mysql_close? ca a un impact sur les perf?