|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : décembre 2002 Messages : 140 ![]() |
Bonjour à tous,
Voici mon problème : J'ai une table LETTRES contenant une colonne DESTINATAIRES de type VARCHAR. Cette colonne DESTINATAIRES recense donc les identifiants (colonne ID dans la table DESTINATAIRES) des destinataires auxquels a été envoyé une lettre, séparés par des point-virgules, par exemple 1;5;18;25;32 L'exemple indique donc que la lettre en question a été envoyée aux destinataires d'identifiants 1, 5, 18, 25 et 32. La question : Comment faire pour écrire une requête SELECT permettant par exemple de retourner les identifiants des lettres (colonne ID dans la table LETTRES) qui ont été envoyées au contact d'identifiant 25 ? Du style : Code :
SELECT id FROM lettres WHERE destinataires=25 Le problème c'est que j'ai des VARCHAR d'identifiants séparés par des point-virgules... Merci d'avance pour votre aide ! P.s. : pour info, j'utilise une base de données Apache Derby.
__________________
</aliasjcdenton> "Un Homme devient vieux lorsque ses regrets prennent la place de ses rêves" |
|
|
00
|
|
|
#2 |
![]() ![]() Alain Ingénieur d'études décisionnel Inscription : mai 2002 Messages : 4 445 ![]() |
Ta question démontre avant tout que la structure de ta base de données n'est pas normalisée.
On ne gère pas une liste dans une colonne de table, mais dans une table fille ! Je ne connais pas Derby ni ses capacités de prise en charge d'une expression régulière dans un filtre. Avec un SGBD dont le langage SQL est conforme à la norme ANSI, tu pourrais écrire ceci : Code :
... WHERE destinataires LIKE ANY ('25', '25;%'; '%;25', '%;25;%')
__________________
Modérateur Langage SQL N'oubliez pas le bouton et pensez aux balises [code]Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur ![]() |
|
|
00
|
|
|
#3 |
|
Membre du Club
![]() Inscription : décembre 2002 Messages : 140 ![]() |
Merci pour la réponse !
Concernant la table fille, s'agit-il d'une table dont les colonnes sont les différentes lettres et les lignes les contacts associés ou l'inverse ? Çà me paraît quand même un peu lourd à gérer, non ?
__________________
</aliasjcdenton> "Un Homme devient vieux lorsque ses regrets prennent la place de ses rêves" |
|
|
00
|
|
|
#4 |
|
Membre expérimenté
![]() Inscription : octobre 2002 Messages : 654 ![]() |
Bonjour,
Ce que suggère al1_24 c'est, je crois, de créer une table destination DESTINATAIRE_LETTRE de structure LETTRE_ID DESTINATAIRE_ID avec LETTRE_ID DESTINATAIRE_ID comme clé primaire si comme probablement une lettre ne peut pas être envoyé plusieurs fois au même destinataire. Si tu trouves que ta structure est plus simple à gérer, c'est ton avis, mais tu te rends compte de son inconvénient quand tu cherches les lettres qui ont été envoyé au destinataire 25, et pire qui ont été envoyé à 25 et 28 mais pas à 23 Bon courage pour les conditions sur les like et pour les performances aussi, parce que sur ce genre de structure les index ne sont pas très utiles. Après tout dépends de tes besoins et de la fréquence du genre de requête que tu demandes. A+ Soazig |
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() Inscription : décembre 2002 Messages : 140 ![]() |
Oui, j'y vois plus clair maintenant et c'est une très bonne idée d'avoir une table intermédiaire, qui me permet de plus d'ajouter des infos telles que la date d'envoi à tel ou tel destinataire, la réception ou non d'un accusé de lecture, etc.
Merci pour vos éclaircissements !
__________________
</aliasjcdenton> "Un Homme devient vieux lorsque ses regrets prennent la place de ses rêves" |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com