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

Requêtes et SQL. Discussion :

Requete SQL pour intersection entre 2 autres requete SQL


Sujet :

Requêtes et SQL.

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    325
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2006
    Messages : 325
    Points : 207
    Points
    207
    Par défaut Requete SQL pour intersection entre 2 autres requete SQL
    Bonjour,

    J'ai 2 formulaires de recherche multi-critère sur des plantes.
    L'un selon différentes caractéristiques de la plante et l'autre d'après leurs utilisations.
    Sur chaque formulaire la liste des resultats est donné dans une zone de liste grace a une requete SQL. (comme dans le tuto!)

    J'aimerais faire un 3e formulaire dans lequel on trouverait également une zone de liste mais qui m'afficherait uniquement les plantes communes au 2 autres requêtes.

    Comment puis-je faire?

    Merci d'avance pour toute les pistes que vous me proposerez.

  2. #2
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    salut,

    chaque zone de liste des formulaires respectifs ont une requete unique ou elles se modifient?
    si les requetes sont fixe: une requete reprenant les filtres des deux formulaires avec un 'AND' dans le where serait suffisant.
    sinon: il faudra récupérer la SQL de chacune des forms et reconstruire la SQL.

  3. #3
    Membre expérimenté Avatar de bernardmichel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2004
    Messages
    1 181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 181
    Points : 1 591
    Points
    1 591
    Par défaut
    Hello Sandrine !

    Si je comprends bien tu as deux tables, dans lesquelles tu as tes plantes. Une table dans laquelle tu as le nom de la plante avec ses caractéristiques, une autre table dans laquelle tu as le même (parfois) nom de plante avec son utilisation.

    Je te conseillerais de reprendre la logique de tes tables et d'en créer 3:
    La première : "tblPlantes" dans laquelle tu te contentes des données de base de la plante (nom(s) de la plante, etc) mais surtout d'un champ "IdPlante" (Numéroauto)
    La deuxième : "tblCaracteristiques" où tu reprends le IdPlante (Numérique, EntierLong) et un ou plusieurs champs (texte et/ou mémo)
    La troisième : "tblUtilisations" où tu reprends également le IdPlante(Idem) et un ou plusieurs autres champs (idem)

    Tu peux ainsi créer les relations entre tes différentes tables et sur cette base là, tu pourras reprendre tes listes déroulantes beaucoup plus facilement et tu pourras plus aisément faire toutes les statistiques que tu souhaites voir apparaître.

    Bernard.

    A+

  4. #4
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Citation Envoyé par p'tite Sandrine Voir le message
    Sur chaque formulaire la liste des resultats est donné dans une zone de liste grace a une requete SQL. (comme dans le tuto!)

    Bonsoir,

    Pour y voir plus clair, merci de préciser:
    • de quel tuto tu parles (un lien)
    • donnes le code SQL des deux listes déroulantes

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    325
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2006
    Messages : 325
    Points : 207
    Points
    207
    Par défaut
    Merci a tous,

    vodiem: effectivement je pensais pouvoir eviter de réécrire completement une requete supplémentaire mais ce sera pourtant le plus logique.

    bernardmichel: heu.. non , il ne s'agit pas de table mais de champs zone de liste qui m'affiche le resultat de requete SQL. Mes table sont déjà faites et ont effectivement un IDPlante qui les relient entre elles.

    mout1234:
    voici les précisions demandées
    Tuto de caféine http://cafeine.developpez.com/access...echerchemulti/

    1ere requete SQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    Public Sub RefreshQuery()
    Dim SQL As String
     
    SQL = "SELECT Identité.ID, Identité.[nom latin], Identité.type, Identité.feuillage, Identité.exposition FROM Identité INNER JOIN utilisation ON Identité.ID = utilisation.ID WHERE Identité.ID<>0"
    If chkTyp = -1 Then
        If Not IsNull(Me!lstTyp) Then
        SQL = SQL & " And Identité.type =" & "'" & Me!lstTyp & "'"
        End If
        If Me!Grimp = -1 Then
        SQL = SQL & " And  utilisation.grimpant = -1"
        End If
        If Me!chkCouvSol = -1 Then
        SQL = SQL & " And  utilisation.[couvre-sol] = -1"
        End If
    End If
    If chkTail = -1 Then
    SQL = SQL & " And Identité.hauteur Between " & Me!TailMin & " And " & Me!TAilMax
    End If
    If chkEtal = -1 Then
    SQL = SQL & " And Identité.étalement Between " & Me!EtalMin & " And " & Me!EtalMax
    End If
    If chkExpo = -1 Then
    SQL = SQL & " And Identité.exposition =" & "'" & Me!lstExpo & "'"
    End If
    If chkAcid = -1 Then
    SQL = SQL & " And Identité.sol =" & "'" & Me!Acide & "'"
    End If
    If chkSol = -1 Then
    SQL = SQL & " And Identité.TypSol =" & "'" & Me!sol & "'"
    End If
    If chkFeuil = -1 Then
    SQL = SQL & " And Identité.feuillage =" & "'" & Me!Feuille & "'"
    End If
    If chkCFeuil = -1 Then
    SQL = SQL & " And Identité.Cfeuille =" & "'" & Me!CoulFeuil & "'"
    End If
    If chkFleur = -1 Then
    SQL = SQL & " And Identité.Cfleur =" & "'" & Me!CoulFleur & "'"
    End If
     
    SQL = SQL & " ORDER BY Identité.[nom latin];"
    Me.lstResult.RowSource = SQL
    Me.lstResult.Requery
     
    If Me.lstResult.ListCount = 1 Or Me.lstResult.ListCount = 0 Then
    Me.NCount.Value = Me.lstResult.ListCount & " plante"
    Else
    Me.NCount.Value = Me.lstResult.ListCount & " plantes"
    End If
    End Sub
    2eme requete SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Private Sub RefreshQuery()
    Dim SQL As String
    Dim SQLWhere As String
     
    SQL = "SELECT Identité.ID, Identité.[nom latin], Identité.type, Identité.feuillage, Identité.exposition FROM Identité INNER JOIN utilisation ON Identité.ID = utilisation.ID WHERE Identité.ID<>0"
    If chkMassif = -1 Then
    SQL = SQL & " And utilisation.massif = -1"
    End If
    If chkIsole = -1 Then
    SQL = SQL & " And utilisation.isolé = -1"
    End If
    If chkHaie = -1 Then
    SQL = SQL & " And utilisation.haie = -1"
    End If
    If chkAqua = -1 Then
    SQL = SQL & " And utilisation.berge = -1"
    SQL = SQL & " Or utilisation.aquatique = -1"
    End If
    If chkTalus = -1 Then
    SQL = SQL & " And utilisation.talus = -1"
    End If
    If chkBac = -1 Then
    SQL = SQL & " And utilisation.[bac de plantation] = -1"
    End If
    If chkVent = -1 Then
    SQL = SQL & " And utilisation.resistVent = -1"
    End If
    If chkAutomne = -1 Then
    SQL = SQL & " And utilisation.feuilAut = -1"
    End If
    If chkToxique = -1 Then
    SQL = SQL & " And utilisation.toxicité = '1'"
    End If
    If chkJeux = -1 Then
    SQL = SQL & " And utilisation.PlainJeux = -1"
    End If
    If chkStat = -1 Then
    SQL = SQL & " And utilisation.public = -1"
    End If
     
    SQL = SQL & " ORDER BY Identité.[nom latin];"
    Me.lstTrouv.RowSource = SQL
    Me.lstTrouv.Requery
    If Me.lstTrouv.ListCount = 1 Or Me.lstTrouv.ListCount = 0 Then
    Me.NCount.Value = Me.lstTrouv.ListCount & " plante"
    Else
    Me.NCount.Value = Me.lstTrouv.ListCount & " plantes"
    End If
    End Sub
    donc chaque liste commence par IDPlante (colonne liée) et affiche le noms latin, le type de plante (vivace, anuelle, arbuste,...) le type de feuillage (caduc,...), et l'exposition préférée de chaque plante

    Mon but etait de pouvoir retrouver les plantes commune aux 2 listes de résultats.
    Mais comme me l'a dit Vodiem il suffit de combiner mes critères.

  6. #6
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Citation Envoyé par p'tite Sandrine Voir le message
    Bonjour,
    J'aimerais faire un 3e formulaire dans lequel on trouverait également une zone de liste mais qui m'afficherait uniquement les plantes communes au 2 autres requêtes.

    Comment puis-je faire?
    Citation Envoyé par p'tite Sandrine Voir le message

    vodiem: effectivement je pensais pouvoir eviter de réécrire completement une requete supplémentaire mais ce sera pourtant le plus logique.
    1ere requete SQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Sub RefreshQuery()
    ...
    End Sub
    2eme requete SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub RefreshQuery()
    ...
    End Sub
    ...
    Mais comme me l'a dit Vodiem il suffit de combiner mes critères.
    Comme tu dis, il te faut donc créer une fonction RefershQuery combinant les critères des deux autres. Au vu de la structure, cela ne devrait pas être trop compliqué.


    N'oublie pas de clore cette discussion si tu solutionnes ton souci (en cliquant sur ).

    Bon courage

  7. #7
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    pour résumer:
    récupérer le RowSource d'une liste, le concaténer avec la partir après le 'WHERE' de l'autre RowSource de la seconde liste avec un 'AND'.
    (attention au dédoublage de : 'Identité.ID<>0')

    et comme le précise mout1234: penser à mettre à jour cette requete lors d'une modification d'une des deux listes.

    bon courage.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête SQL pour max entre 3 colonnes
    Par lucho013 dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 10/10/2007, 17h06
  2. [MySQL] afficher une requete en fonction de résultats d'autres requetes
    Par mayers dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 27/07/2007, 10h42
  3. Réponses: 8
    Dernier message: 27/01/2007, 13h44
  4. Réponses: 4
    Dernier message: 14/01/2007, 13h21
  5. Réponses: 8
    Dernier message: 21/07/2006, 10h12

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