Page 1 sur 1

Passer plusieurs commandes dans une requête

Posté : 05 juin 2007, 19:07
par Toro
Bonjour.

J'essaye d'optimiser mes scripts et j'ai lu dans la doc MySQL qu'on pouvait saisir (en mode ligne de commande) plusieurs commandes sur une seule ligne en terminant par des points-virgules."

Donc voilà t'y pas que j'essaie de faire la même chose à partir de PHP qui bien entendu ne fonctionne pas :

Code : Tout sélectionner

$resultat_sql = mysql_query("UPDATE pays SET pays_etat=abs(pays_etat-1) WHERE pays_code='AE'; UPDATE pays SET pays_etat=abs(pays_etat-1) WHERE pays_code='BA'; UPDATE pays SET pays_etat=abs(pays_etat-1) WHERE pays_code='FR'",$connexion);
Autre question, je switche entre les valeurs 0 et 1 avec la commande "pays_etat=abs(pays_etat-1)"
Ca marche bien mais n'existe-t'il pas une autre méthode moins alambiquée ?

D'avance merci.

Posté : 05 juin 2007, 19:51
par Sékiltoyai
Pour ton 2nd problème :

Code : Tout sélectionner

pays_etat=IF(pays_etat=0,1,0)

Posté : 05 juin 2007, 20:38
par Hubert Roksor
Il faut savoir que si exécuter plusieurs requêtes différentes à la fois peut dans certain cas faire économiser du temps, c'est en même temps plus difficile à débugger et finalement très peu rentable. Un peu comme retirer le siège passager de sa voiture pour gagner 0,1 km/h sur l'autoroute.

Ensuite, tes requêtes ne sont pas différentes car seule la clause WHERE change donc elles peuvent être fusionnées. Finalement, si tu ne switch qu'entre 1 et 0 le plus simple est d'utiliser le résultat d'une soustraction. Soit A et B les deux valeurs possibles, pour changer la valeur de la colonne on applique "(A+B) - <valeur actuelle>", donc "1 - pays_etat". Le truc avec IF() marcherait aussi, mais est moins portable.

Code : Tout sélectionner

UPDATE pays SET pays_etat = 1 - pays_etat WHERE pays_code IN ('AE', 'BA', 'FR')

Posté : 05 juin 2007, 21:15
par Toro
Il faut savoir que si exécuter plusieurs requêtes différentes à la fois peut dans certain cas faire économiser du temps, c'est en même temps plus difficile à débugger et finalement très peu rentable. Un peu comme retirer le siège passager de sa voiture pour gagner 0,1 km/h sur l'autoroute.
Mais c'est possible ou non en PHP ? Pas moyen de trouver un exemple valide de commandes multiples.

Merci pour les tuyaux sur mon deuxième problème, c'est très intéressant !

Posté : 05 juin 2007, 23:08
par Hubert Roksor
Ce n'est possible qu'avec la fonction mysqli_multi_query()

Les requêtes multiples sont spécifiquement désactivées pour mysql_query() et mysqli_query(), pour des raisons de sécurité.

Posté : 06 juin 2007, 01:20
par Toro
Merci beaucoup pour toutes ces réponses :D