Passer plusieurs commandes dans une requête

Petit nouveau ! | 3 Messages

05 juin 2007, 19:07

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.

ViPHP
ViPHP | 5924 Messages

05 juin 2007, 19:51

Pour ton 2nd problème :

Code : Tout sélectionner

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

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

05 juin 2007, 20:38

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

Petit nouveau ! | 3 Messages

05 juin 2007, 21:15

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 !

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

05 juin 2007, 23:08

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

Petit nouveau ! | 3 Messages

06 juin 2007, 01:20

Merci beaucoup pour toutes ces réponses :D