JeuWeb - Crée ton jeu par navigateur
suppression multiple dans une basse de donnée - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : suppression multiple dans une basse de donnée (/showthread.php?tid=1988)



suppression multiple dans une basse de donnée - jo_link_noir - 09-11-2007

bonsoir tout le monde

alors voilà, en fait je veux supprimer des champs dans 4 table différentes. Mais je me demander s'il n'est pas possible de le faire en une seul requête (comme pour un select...). J'ai un peu tester mais il me fout une erreur :
"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE alliance2.id=3 OR alliance_membre.id=3 OR alliance_gro' at line 3"
je dois me tromper quelque part ^^


Citation :$query = sprintf("
DELETE
FROM alliance2, alliance_groupe, alliance_membre, alliance_demande
WHERE alliance2.id=%d
OR alliance_membre.id=%1\$d
OR alliance_groupe.id_alliance=%1\$d
OR alliance_demande.id_alliance=%1\$d
", $id_alliance);

si une gentille personne pouvais m'aidais, je lui serais très reconnaissant ^^


RE: suppression multiple dans une basse de donnée - Sephi-Chan - 09-11-2007

Pourquoi tu ne fais pas %1\$d pour le premier élément ?

La Syntaxe de DELETE pour la suppression est la suivante :
Code PHP :
<?php 
DELETE
[LOW_PRIORITY] [QUICK] [IGNORE] table_name[.*] [, table_name[.*] ...]
FROM table-references
[WHERE where_definition]
Ou :
Code PHP :
<?php 
DELETE
[LOW_PRIORITY] [QUICK] [IGNORE]
FROM table_name[.*] [, table_name[.*] ...]
USING table-references
[WHERE where_definition]



RE: suppression multiple dans une basse de donnée - Plume - 09-11-2007

J'ai jamais utilisé sprintf. J'comprends pas cette histoire d'internationalisation. Cependant, j'suis pas encore une bille Tongue

Citation :La commande DELETE n'opère directement que sur une seule table.
En cas d'ambiguïté, parce que tu désignes plusieurs tables dans la clause FROM, alors tu dois spécifier la table dans laquelle les suppressions ont lieu.

Si tu veux automatiquement supprimer des enregistrements "connexes" dans d'autres tables, alors tu dois mettre en oeuvre l'intégrité référentielle (relations 1-N entre tables) en précisant une suppression en cascade.
Dans ce cas de suppression en cascade, la table qui sera visée par le DELETE est la table du côté 1 de la relation.

Sinon, si tu ne peux pas mettre en oeuvre l'intégrité référentielle + suppression en cascade, il te reste à découper ta requête pour chacune des tables (éventuellement au sein d'une transaction).



RE: suppression multiple dans une basse de donnée - despe - 09-11-2007

regarde sur les jointures mysql ca aidera.. (INNER JOIN / LEFT JOIN etc..)


RE: suppression multiple dans une basse de donnée - jo_link_noir - 10-11-2007

Citation :Pourquoi tu ne fais pas %1\$d pour le premier élément ?
je sais pas XD
ça change quelque chose ?

@LexLxUs -- je comprend pas bien "l'intégrité référentielle", pourrais-tu m'expliquer un peu ce que c'est ?