Delete sur plusieurs tables...

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 : Delete sur plusieurs tables...

par ouckileou » 20 juin 2008, 14:16

Modération :
albius, si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.
Tu peux réaliser cette opération en cliquant sur le bouton Image en haut à gauche de ce sujet.

par Rei Itchido » 19 juin 2008, 16:35

Pour être complet et pour répondre à zeus,

http://dev.mysql.com/doc/refman/5.0/fr/delete.html

Code : Tout sélectionner

Le code .* après les noms de tables n'est présent que pour assurer la compatibilité avec Access : DELETE t1,t2 FROM t1,t2,t3 WHERE t1.id=t2.id AND t2.id=t3.id
.* n'est donc pas utile, je m'incline devant le grand zeus (voudrais pas me prendre un coup d'éclair non plus)

re:

par albius » 19 juin 2008, 16:22

Merci messieurs!

par Rei Itchido » 19 juin 2008, 15:23

Ce qui permet de faire

Code : Tout sélectionner

DELETE t1.*, t2.* FROM t1, t2, t3 WHERE t1.xx=t2.xx AND t2.yy=t3.yy
On utilise t3 pour la clause WHERE sans pour autant effacer quoique ce soit sur cette table.

par Rei Itchido » 19 juin 2008, 15:21

Dans le cadre de DELETE sur plusieurs tables (puisque c'est la question :p )
Je le fais comme ça pour ma part en tout cas et ça fonctionne.

par zeus » 19 juin 2008, 15:17

pourquoi table1.* ?

On écrit

Code : Tout sélectionner

DELETE FROM table WHERE condition
pas

Code : Tout sélectionner

DELETE * FROM table WHERE condition

par Rei Itchido » 19 juin 2008, 15:04

Il me semble qu'il faut que tu fasses

Code : Tout sélectionner

DELETE table1.*, table2.* etc...
Mais fais attention, sois sûr que tes conditions soient correctes avant d'executer ta requête... Fais un SELECT comme te le conseille zeus

par zeus » 19 juin 2008, 14:59

Commencer par faire un SELECT qui sélectionne les données à effacer et remplace le "SELECT [liste des champs] FROM" par "DELETE".

Après, je ne me suis jamais posé la question de supprimer des données sur plusieurs tables simultanément :?

Delete sur plusieurs tables...

par albius » 19 juin 2008, 14:47

Bonjour,

Bien qu'après avoir lu la documentation à propos de delete, je n'arrive toujours pas à formaliser correctement la requête que je voudrais établir. Requête qui doit toucher 3 tables. Donc, dans l'ordre:
Version de MySQL:5.0.45
Structure des tables concernées:

Code : Tout sélectionner

CREATE TABLE `apprentis` ( `CiviliteApp` varchar(4) character set utf8 collate utf8_unicode_ci default NULL, `NomApp` varchar(20) character set utf8 collate utf8_unicode_ci default NULL, `... `[b]idapp` int(5) NOT NULL auto_increment,[/b] `Actif` varchar(1) character set utf8 collate utf8_unicode_ci NOT NULL, KEY `idapp` (`idapp`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=344 ; CREATE TABLE `commentaires` ( `date` varchar(10) default NULL, ... [b]`idapp` int(5) NOT NULL default '0',[/b] `lu` int(5) NOT NULL default '0', `idcomm` int(5) NOT NULL auto_increment, KEY `idcomm` (`idcomm`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=791 ; CREATE TABLE `suiviapprentis` ( `DateDebutContrat` varchar(10) NOT NULL default '', `DateFinContrat` varchar(10) NOT NULL default '', `... [b]`idapp` int(5) NOT NULL default '0',[/b] `Diplome` varchar(50) NOT NULL default '', ... `idsession` int(2) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
et voilà en question la requête que je voudrais corriger :

Code : Tout sélectionner

$delete= 'DELETE apprentis, commentaires, suiviapprentis FROM apprentis, commentaires, suiviapprentis WHERE apprentis.idapp=commentaires.idapp AND commentaires.idapp=suiviapprentis.idapp AND apprentis.idapp=\''.$idApp.'\';';
J'avoue pour l'instant ne pas comprendre le problème...
merci,