Consultez la formation SEO spéciale Wordpress
par WebRankInfo / Ranking Metrics

Messages: 460

Enregistré le: 3 Fév 2005

Message le Dim Fév 26, 2017 21:59

Bonjour, je souhaite réunir 3 requêtes delete qui très semblables mais j'ai essayé diverses techniques, impossible de supprimer tous les enregistrements dans lesquels le champ user contient l'id_user en question

Voici les 3 requêtes que j'aimerais réunir :

Code: Tout sélectionner
$delete_1 = $pdo->query("DELETE FROM table 1 WHERE user='$id_user'");
$delete_2 = $pdo->query("DELETE FROM table 3 WHERE user='$id_user'");
$delete_3 = $pdo->query("DELETE FROM table 3 WHERE user='$id_user'");


Merci
Haut
10 Réponses
Messages: 148

Enregistré le: 19 Oct 2016

Message le Lun Fév 27, 2017 16:33

Bonjour,

Essaye un truc dans ce style avec un join :

DELETE FROM table1 INNER JOIN table3
WHERE table1.id=table3.id AND table1.id='$id_user'

C'est normal que $delete_2 et $delete_3 soient similaires ?
Haut
Messages: 1701

Enregistré le: 11 Nov 2007

Message le Mer Mar 01, 2017 10:14

La commande Delete ne fonctionne que sur UNE table, pas plusieurs normalement.

Ensuite, il faudrait essayer Delete from table1, table2, table3 where... mais je ne pense pas que cela changera grand chose en performance (voire être même plus lent!).
Haut
Messages: 727

Enregistré le: 18 Nov 2010

Message le Lun Mar 06, 2017 17:12

Qu'est-ce qui pose problème d'avoir 3 requêtes ?
Si c'est juste pour la forme, ca ne sert à rien.
Si c'est une question d'intégrité (supprimé dans table1 mais planté sur table2), alors utilise les transitions.
Haut
Messages: 8559

Enregistré le: 14 Mai 2003

Message le Lun Mar 06, 2017 17:23

Blount a écrit:alors utilise les transitions.

+1, mais c'est les transactions :)
Haut
Messages: 727

Enregistré le: 18 Nov 2010

Message le Lun Mar 06, 2017 17:27

spout a écrit:
Blount a écrit:alors utilise les transitions.

+1, mais c'est les transactions :)

Tout à fait. J'ai trop fréquenté le CSS ;)
Haut
Messages: 148

Enregistré le: 19 Oct 2016

Message le Lun Mar 06, 2017 18:32

anemone-clown a écrit:La commande Delete ne fonctionne que sur UNE table, pas plusieurs normalement.


Je ne suis pas expert mais je pense que c'est possible
http://stackoverflow.com/questions/1233451/delete-from-two-tables-in-one-query
Haut
Messages: 140

Enregistré le: 17 Oct 2009

Message le Mar Mar 07, 2017 14:47

Blount a écrit:Si c'est une question d'intégrité (supprimé dans table1 mais planté sur table2), alors utilise les transitions.

Transaction ?
Tu pourrais développer STP ?
Haut
Messages: 8559

Enregistré le: 14 Mai 2003

Message le Mar Mar 07, 2017 14:52

https://dev.mysql.com/doc/refman/5.7/en/commit.html
Haut
Messages: 727

Enregistré le: 18 Nov 2010

Message le Mar Mar 07, 2017 15:51

En gros, une fois la transaction initiée, toutes les requêtes effectuées sont exécutées mais le résultat n'est "visible" que par la connexion initiatrice. Ensuite, pour que le résultat soit officiellement appliqué, il faut effectuer un commit. Si la connexion est interrompue (code planté, coupure réseau entre PHP > MySQL, etc.), un rollback est effectué (les requêtes sont annulées).
Le rollback peut être effectué manuellement dans le code.

Bref, c'est pratique.
Haut
Messages: 140

Enregistré le: 17 Oct 2009

Message le Mer Mar 08, 2017 2:39

OK, merci. Je ne connaissais pas.
Haut

Formation recommandée sur ce thème :

Formation SEO spéciale Wordpress : apprenez à optimiser le référencement naturel d'un site fait avec Wordpress... Formation Ranking Metrics animée par un expert SEO / Wordpress.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.