Insert ou Update suivant Select

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Insert ou Update suivant Select

par Hubert Roksor » 24 nov. 2006, 16:16

En fait on peut envoyer plusieurs requêtes à la fois avec mysqli_multi_query() ou utiliser de manière détournée des variantes de INSERT INTO ... ON DUPLICATE KEY UPDATE mais ce n'est pas vraiment plus performant en étant sérieusement plus compliqué à déboguer. Si tu as de nombreuses mises à jour (quelques centaines au plus) à effectuer, je recommande d'utiliser des requêtes préparées (voir mysqli_prepare()) sous MySQLi

Je ne sais pas si c'est une bonne idée de le suggérer, mais il existe une méthode qui peut être plus efficace dans certains cas (plusieurs centaines ou milliers d'UPDATE) c'est de remplacer les UPDATE par des INSERT. Deux façons de procéder : soit tu crées une table temporaire, tu fais un gros INSERT multi-enregistrement dedans puis tu fais un UPDATE multi-table. Soit, dans certains cas très spécifiques (dizaines de milliers d'UPDATE ?) tu crées une nouvelle table, un gros INSERT des nouvelles valeurs puis un INSERT IGNORE pour compléter avec les anciens enregistrements. Après ça, tu RENAME TABLE pour échanger le nom des tables et tu DROP TABLE la table originale. Je ne mentionne cette technique que pour la beauté du sport, ces techniques ne sont adaptées qu'à un très très faible nombre de cas.

par coolhead » 24 nov. 2006, 14:55

Merci :?

par zeus » 22 nov. 2006, 10:54

Plusieurs requêtes en même temps, non.

Plusieurs requetes à la suite, oui ;)

Mais lit bien ce que t'a dit Ajoloca, c'est plein de bon sens. Surtout la partie qui parle de la récupération des erreurs ;)

par coolhead » 22 nov. 2006, 10:52

on ne peut donc pas envoyer plusieurs requetes. :(

par Ajoloca » 21 nov. 2006, 23:27

Bonsoir,

Ce n'est pas tout à fait vrai, sinon il (MySQL) ferait comment pour gérer les transactions ?
Un autre petit point, il ne faut JAMAIS mettre ';' dans tes requêtes PHP.
Tu ne sais pas à l'avance quel est le caractère séparateur de requêtes 'DELIMITER'
L'intérêt d'exécuter une requête à la fois c'est de récupérer un éventuel code d'erreur.

par coolhead » 21 nov. 2006, 23:19

Merci.
ça marche impec.

Mais peut on faire plusieurs Update dans MySQL ?

On peut faire plusieurs UPDATE sur un même enregistrement grace à "UPDATE table SET chp1 = 'test', chp2 = 'azerty' WHERE chp_id = '3';"

Mais il semble que MySQL refuse l'envoi de plusieurs requetes d'un coup tel que "UPDATE table SET chp1 = 'test' WHERE chp_id = '3';UPDATE table SET chp1 = 'test2' WHERE chp_id = '4';"

Sommes nous obliger de faire un boucle qui passe UPDATE par UPDATE (ligne par ligne) ?

par Ajoloca » 20 nov. 2006, 00:20

Bonsoir,

Tu n'as pas besoin de faire un 'SELECT' avant.
Tout simplement avec

Code : Tout sélectionner

INSERT INTO ... ON DUPLICATE KEY UPDATE ..

Insert ou Update suivant Select

par coolhead » 20 nov. 2006, 00:17

Bonjour,

Peut simplement faire un insert ou un update dans une table suivant le résultat d'un select en une requete sans faire :

select ....
si exits => update ...
si non => insert ...

:?: