Besoin d'aide pour une requête MySQL

Le
messian_nospam
Bonjour,

J'ai le problème suivant :

J'ai classé des informations dans des dossiers et il y a plusieurs type
de dossiers.

J'ai donc 3 tables :

1 - type_dossier : qui me sert à déterminer les types de dossiers avec
les champs suivants :

type_dossier_id
lb_type_dossier : nom du type de dossier

2 - dossiers : ce sont les différents dossiers avec les champs suivants
:

dossier_id
type_dossier_id
dossier_lb : nom du dossier

3 - liens_infos qui permet de stoquer les infos dans des dossiers avec
les champs suivants :

dossier_id
info_id

Je souhaite supprimer un type de dossier, il me faut donc

a) supprimer le type dans la table type_dossier

b) supprimer tous les dossiers ayant ce type dans la table dossiers

c) supprimer tous les liens vers des infos appartenant à un dossier
ayant comme type le type de dossier que je souhaite supprimer.

C'est la requêtes c) qui me pose problème

Peut-on avoir quelque chose comme :

DELETE FROM liens_infos WHERE (SELECT dossier_id FROM dossiers WHERE
type_dossier_id =$ type_dossier_id ) ???

Je suis un peu perdu là
--
Un moyen de garde pour vos enfants ?
http://www.easynounou.com
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Eric Rossé
Le #21852101
Le Thu, 5 Jul 2007 11:12:55 +0200, JF Messian écrivait:

Je souhaite supprimer un type de dossier, il me faut donc

a) supprimer le type dans la table type_dossier

b) supprimer tous les dossiers ayant ce type dans la table dossiers

c) supprimer tous les liens vers des infos appartenant à un dossier
ayant comme type le type de dossier que je souhaite supprimer.




Pour des raisons d'intégrité, il vaut mieux procéder à l'envers:
c) d'abord puis b) puis a)

Sinon, la requête c) est du genre :
delete from liens_info where dossier_id
in (select dossier_id from dossiers where type_dossier_id = :type_dossier_id)
messian_nospam
Le #21852061
Eric Rossé
Le Thu, 5 Jul 2007 11:12:55 +0200, JF Messian écrivait:

>Je souhaite supprimer un type de dossier, il me faut donc
>
>a) supprimer le type dans la table type_dossier
>
>b) supprimer tous les dossiers ayant ce type dans la table dossiers
>
>c) supprimer tous les liens vers des infos appartenant à un dossier
>ayant comme type le type de dossier que je souhaite supprimer.


Pour des raisons d'intégrité, il vaut mieux procéder à l'envers:
c) d'abord puis b) puis a)




Oui évidemment... mais c'était juste pour mon explication là !

Sinon, la requête c) est du genre :
delete from liens_info where dossier_id
in (select dossier_id from dossiers where type_dossier_id = :type_dossier_id)



OK... je teste ça !

MERCI !

--
Un moyen de garde pour vos enfants ?
http://www.easynounou.com
Jogo
Le #21852041
Sur fr.comp.applications.sgbd, JF Messian disait :

Je souhaite supprimer un type de dossier, il me faut donc

a) supprimer le type dans la table type_dossier

b) supprimer tous les dossiers ayant ce type dans la table dossiers

c) supprimer tous les liens vers des infos appartenant à un dossier
ayant comme type le type de dossier que je souhaite supprimer.



Ce genre de comportement peut être précisé dès la création des tables
dans la contrainte de clef étrangère. Par exemple pour la table
dosiers :

type_dossier_id INTEGER
REFERENCES type_dossier(type_dossier_id)
ON DELETE CASCADE,

Cette syntaxe est conforme aux standards SQL, mais je ne sais pas si
c'est implémenté dans MySQL.

--
[Lors de l'AAD de fr.rec.jeux.nomic, en parlant du Nomic]
> J'ai rien compris non plus.
C'est un genre de paintball, mais en plus violent.
messian_nospam
Le #21852031
Jogo
Sur fr.comp.applications.sgbd, JF Messian disait :

> Je souhaite supprimer un type de dossier, il me faut donc
>
> a) supprimer le type dans la table type_dossier
>
> b) supprimer tous les dossiers ayant ce type dans la table dossiers
>
> c) supprimer tous les liens vers des infos appartenant à un dossier
> ayant comme type le type de dossier que je souhaite supprimer.

Ce genre de comportement peut être précisé dès la création des tables
dans la contrainte de clef étrangère. Par exemple pour la table
dosiers :

type_dossier_id INTEGER
REFERENCES type_dossier(type_dossier_id)
ON DELETE CASCADE,

Cette syntaxe est conforme aux standards SQL, mais je ne sais pas si
c'est implémenté dans MySQL.



Oui j'avais vu ça... le hic c'est que la base utilisée n'est pas très
clean niveau analyse fonctionnelle....

:-(

--
Un moyen de garde pour vos enfants ?
http://www.easynounou.com
Publicité
Poster une réponse
Anonyme