IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Appliquer la logique OR avec des tables


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2004
    Messages : 201
    Points : 96
    Points
    96
    Par défaut Appliquer la logique OR avec des tables
    Bonjour,

    Je sais pas trop comment expliquer mon probleme, mais je vais essayer de resumer simplement.

    Imaginons 3 tables correspondant a des pays:

    FRANCE ITALIE OUZBEKISTAN
    -------- -------- ----------------

    Chacune d'elle comprenant une liste de villes (id/nom)

    J'ai une nouvelle table (VOLS) qui contient une liste d'infos sur des vols, ont une colonne qui correspont a la ville de destination, dans un des 3 pays.

    Donc cet colone peut contenir:
    SOIT un ID de la table FRANCE
    SOIT un ID de la table ITALIE
    SOIT un ID de la table OUZBEKISTAN

    Ma question est comment ecrire proprement cette logique.

    C'est la premiere fois que j'ai cette situation alors j'avais pense a 2 solutions:

    - Dans ma table VOL, mettre 3 colonnes correspondant au 3 ID des tables pays, seul une d'entre elle sera rempli, les autres a null.

    - Soit 1 colonne VilleID et une colone PAYS, ou, en fonction de la valeur de PAYS, je vais chercher dans le bonne table la ville avec l'ID

    Aucune des 2 me parrait parfaite.

    Avez vous des proposition ?
    Merci.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Bonjour,
    Déjà, si tu peux changer le modèle, fais le. Une table pays, une table ville qui référence un pays, et une table vol qui référence une ville, ce serait déjà moins moche.

    Sinon, j'opterai pour la seconde solution, dans le cas ou ton nombre de pays augmenterait, la première deviendrait trop contraignante.

  3. #3
    Membre régulier
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2004
    Messages : 201
    Points : 96
    Points
    96
    Par défaut
    Oui je suis d'accord.
    Mais bon boss me certifie qu'il n'y aura pas d'autres "PAYS"...
    Il a opte pour la preniere..., Bref...

    Et il existe pas un modele tout fait a ce genre de situation ? Elle a deja du etre rencontree quand meme...

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    L'histoire des trois tables pour tes pays, c'est quelque chose déjà en place que tu ne peux pas changer?
    Question subsidiaire, quel est ton sgbd?

  5. #5
    Membre régulier
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2004
    Messages : 201
    Points : 96
    Points
    96
    Par défaut
    C'est MySQL.

    Oui j'ai ces 3 tables sur.
    Ensuite sur un autre table A, 3 une colones qui correspondent a la primary key de chacune des tables correspondantes (dont certaines peuvent etre nulles).

    Pour l'instant ca marche comme ca mais je trouve ca crade, alors je me demandai si yavais une solution toute pondue pour ce genre de cas, ca je me rappelle en cours sur les MCD, qu'on pouvais mettre un OR entoure entre plusieurs tables, mais je me rapelle plus ce que ca fait sur la base en elle meme...

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 046
    Points
    34 046
    Billets dans le blog
    14
    Par défaut
    Entièrement d'accord avec la première réponse de Snipah. Si tu peux changer ton modèle de données, fais-le !

    Règle de gestion :
    "Une ville est située dans un pays et un pays comprend plusieurs villes."

    MCD :
    Ville -1,1----Situer----0,n- Pays

    Tables :
    Pays (P_Id, P_Nom, P_Code, ...)
    Villes (V_Id, V_Nom, V_IdPays, ...)

    Règle de gestion :
    "Un vol va relie une ville de départ et une ville d'arrivée."

    MCD :
    Ville -0,n-(départ)---Relier----1,1- Vol
    |---0,n-(arrivée)-----|

    Tables :
    Vols (Vo_Id, Vo_IdVilleDepart, Vo_IdVilleArrivee, ...)
    Avec une contrainte d'unicité sur le couple (Vo_IdVilleDepart, Vo_IdVilleArrivee) et un trigger à l'implémentation qui vérifiera que la ville de départ est différente de la ville d'arrivée.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Membre régulier
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2004
    Messages : 201
    Points : 96
    Points
    96
    Par défaut
    Oui je suis d'accrod avec vous mais les tables et l'exemple donne est completement fictif, et servait juste a illustrer un peu mon prob: le cas du OR

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 42
    Points : 23
    Points
    23
    Par défaut
    Bonjour, j'ai le même problème!

    Je dois effectuer une requête dans une table comprenant plusieurs champ.

    Il me faut dire si dans la table "Personne" s'il roule avec tel ou tel voiture et le seul moyen que je vois est le OR pour dire cette voiture la ou celle la.

    Mais si je mets plusieurs OR, la requête retourne un résultat bidon...

  9. #9
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 046
    Points
    34 046
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par metalcoyote Voir le message
    Oui je suis d'accrod avec vous mais les tables et l'exemple donne est completement fictif, et servait juste a illustrer un peu mon prob: le cas du OR
    Au lieu de nous faire réfléchir sur un exemple qui a l'air réel mais qui est en fait fictif, donne nous le vrai cas, ce sera plus compréhensible pour nous et plus facile pour t'aider !
    Il est top secret ton projet ou quoi ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  10. #10
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 046
    Points
    34 046
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par wail00 Voir le message
    Bonjour, j'ai le même problème!

    Je dois effectuer une requête dans une table comprenant plusieurs champ.

    Il me faut dire si dans la table "Personne" s'il roule avec tel ou tel voiture et le seul moyen que je vois est le OR pour dire cette voiture la ou celle la.

    Mais si je mets plusieurs OR, la requête retourne un résultat bidon...
    Quelle est ta requête et quelle est la structure de tes tables ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  11. #11
    Membre régulier
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2004
    Messages : 201
    Points : 96
    Points
    96
    Par défaut
    Bon je balance mes vrais nom de tables mais je risque gros

    J'ai deux tables, qui representent des alertes a effectuer, une avec des des donnes concernant divers alertes SMS, l'autre concernant des alertes EMAIL.
    A l'avenir il peut y avoir eventuellement d'autres types d'alertes.

    Une troisiemme table viens faire le lien la dedan en definissant une liste d'action. Chaque action peut etre l'envoi SOIT d'un sms SOIT d'un email.

    Donc pour une action donne, je dois aller pecher ds la bonne table les infos en fonction dy type d'alerte. Donc mes deux solution sont:

    Dans ma table action j'ai deux colones:
    une avec l'id une de mes alertes
    une avec le type d'alerte, pour aller pecher ds la bonne table.

    Soit

    Dans ma table action une colonne specifique pour les ID de la table SMS, une pour les ID de la table Email, et ainsi de suite.

    Donc il y a un OR la dedan je pense.
    Donc:

    Quelle est la meilleure facon de representer ce cas en SQL


Discussions similaires

  1. jTable avec des tables énormes
    Par netmailbeans@gmail.com dans le forum Composants
    Réponses: 3
    Dernier message: 13/02/2006, 21h24
  2. Réponses: 1
    Dernier message: 11/09/2005, 02h04
  3. Récupérer ma base de donnée avec des tables en .frm uniqueme
    Par Michas dans le forum Administration
    Réponses: 5
    Dernier message: 31/08/2005, 13h57
  4. développement d'un site avec des tables ?
    Par stoyak dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 10/08/2005, 11h24
  5. Requête avec des tables de plusieurs bases
    Par Oluha dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/04/2005, 16h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo