Problème de DELETE ....

Eléphant du PHP | 70 Messages

24 févr. 2012, 20:02

Bonsoir

Je me tourne à nouveau vers vous car je rencontre un problème pour la suppression d'une ligne ( ou plusieurs selon les enregistrements ). Je vous explique mon problème. J'ai actuellement trois tables. Une table annonce, une options, et une table option_vehicule. J'aimerai pouvoir effacer une option de la table option et donc automatiquement effacer l'option qui a le même id dans la table option_vehicule. Pas très clair mon explication vous allez me dire.

J'utilise donc comme requête :
DELETE FROM options, option_vehicule USING options, option_vehicule  WHERE id_option = '.$_GET['id_annonce'].' AND option_id = '.$_GET['id_annonce'].' 
Mais si par exemple il n'y a aucun vehicule avec une option dans ma table option_vehicule, alors il est impossible de supprimer l'option de la table "options"

table annonce:
CREATE TABLE IF NOT EXISTS `annonce` (
  `id_annonce` int(11) NOT NULL AUTO_INCREMENT,
  `id_type_annonce` int(11) NOT NULL,
  `id_marque_annonce` int(11) NOT NULL,
  `id_modele` int(11) NOT NULL,
  `couleur_annonce` varchar(10) NOT NULL,
  `description_annonce` text NOT NULL,
  `motorisation_annonce` int(11) NOT NULL,
  `date_annonce` date NOT NULL,
  `proprietaire_annonce` int(11) NOT NULL,
  `km_annonce` varchar(255) NOT NULL,
  `prix_annonce` varchar(255) NOT NULL,
  PRIMARY KEY (`id_annonce`),
  KEY `type_annonce` (`id_type_annonce`)
)

Table options:
CREATE TABLE IF NOT EXISTS `options` (
  `id_option` int(11) NOT NULL AUTO_INCREMENT,
  `titre_option` varchar(200) NOT NULL,
  `description_option` text NOT NULL,
  PRIMARY KEY (`id_option`)
)
et la table option_vehicule:
CREATE TABLE IF NOT EXISTS `option_vehicule` (
  `id_option_vehicule` int(11) NOT NULL AUTO_INCREMENT,
  `vehicule_id` int(11) NOT NULL,
  `option_id` int(11) NOT NULL,
  PRIMARY KEY (`id_option_vehicule`),
  KEY `vehicule_id` (`vehicule_id`)
)

Eléphant du PHP | 179 Messages

24 févr. 2012, 22:16

C'est a cause de tes clefs étrangère, c'est une erreur dues a la logique du SQL
Si il y a une clef étrangère et que tu la supprimes, il ne va pas accepter ou sinon il aurait une erreur de liaison SQL ^^
Deux choix :
- changer les valeurs de tes clefs étrangères avant de supprimer cette clef dans ta table
- supprimer les annonces qui ont cette clef

pour faire ca deux choix :
- trigger ( procédure ancré dans ton SGBD qui va se déclencher quand tu vas supprimer ta clef )
- à la main avec une requête DELETE FROM annonces where id_option=... enfin tu m'as compris :)

Eléphant du PHP | 70 Messages

25 févr. 2012, 15:57

C'est a cause de tes clefs étrangère, c'est une erreur dues a la logique du SQL
Si il y a une clef étrangère et que tu la supprimes, il ne va pas accepter ou sinon il aurait une erreur de liaison SQL ^^
Deux choix :
- changer les valeurs de tes clefs étrangères avant de supprimer cette clef dans ta table
- supprimer les annonces qui ont cette clef

pour faire ca deux choix :
- trigger ( procédure ancré dans ton SGBD qui va se déclencher quand tu vas supprimer ta clef )
- à la main avec une requête DELETE FROM annonces where id_option=... enfin tu m'as compris :)
J'ai du mal à comprendre le principe .... " changer les valeurs de tes clefs étrangères avant de supprimer cette clef dans ta table "