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

HyperFileSQL Discussion :

[SQL] extraire les enregistrement ayant certains éléments dans une chaine / un tableau


Sujet :

HyperFileSQL

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 315
    Points : 202
    Points
    202
    Par défaut [SQL] extraire les enregistrement ayant certains éléments dans une chaine / un tableau
    Bonjour,

    Je ne sais pas très doué en SQL...je ne sais pas s'il est possible de faire cela sous Windev :

    J'ai un table A (ID, liste)
    > liste est une rubrique de type chaine qui contient par exemple "A1,B1,D3,A7..."

    Est-il possible via une Requête de récupérer les enregistrements dont liste contient par exemple les éléments:
    - B1 et D3
    - B1 ou A7
    etc...

    J'ai bien pensé à utiliser l'opérateur IN avec un code du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT * FROM A WHERE
    Liste  IN 'B1' AND Liste IN 'D31'
    qui bien entendu ne fonctionne pas. Le problème est que Liste contient un ensemble de chaînes séparées par des , et pas une chaîne unique, comment faire pour tester chacune ?

    Existe-t-il un moyen efficace sous Windev de faire celà ?
    Je précise que je suis en HyperFile C/S

    Merci

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 315
    Points : 202
    Points
    202
    Par défaut
    Bon, je me réponds tout seul, en utilisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT * FROM A WHERE
    Liste LIKE '%A1%' OR Liste LIKE '%B2%'
    ça marche.

    S'il existe une meilleure solution, ma question court toujours

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Bonjour,
    Tu peux utiliser like:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT * FROM A WHERE
    (Liste like '%B1,%' or liste like '%B1') AND (Liste like '%D31,%' or liste like '%D31')

    Tatayo.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 315
    Points : 202
    Points
    202
    Par défaut
    Merci Tatayo tu confirmes mon idée

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Même si la solution "marche", on ne stocke pas une multitude de valeur dans une colonne mais une seule. La requête est bancale, pas performante et difficile à maintenir.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 315
    Points : 202
    Points
    202
    Par défaut
    Je suis d'accord sur le principe, mais là je peux difficilement faire autrement, j'ai besoin de stocker les balises rencontrées dans un fichier, elles peuvent être toutes présentes, comme aucune, comme un certain nombre et ces mêmes balises ne sont pas figées, de nouvelles apparaissent souvent, donc difficile de les prévoir ...

    Bref, j'ai aussi pensé à passer par un fichier de variables mais je ne suis pas séduit.

    Une autre idée ? (sachant que rien n'est encore figé)

  7. #7
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Avec une modélisation normale, si vous deviez représenter que l'entité A peut avoir des balises :

    A = {A_ID, ...}
    BALISE = {BALISE_ID, BALISE_CODE}
    A_BALISE = {#A_ID, #BALISE_ID}
    Quand vous parsez un fichier :

    - Ajout des balises qui n'existent pas dans la table BALISE
    - Ajout d'une ligne dans la table A (qui a l'air de matérialiser un fichier)
    - Ajout des lignes dans la table A_BALISE pour indiquer que A possède des balises.

    Retourner les lignes de A qui disposent des balises B1 et D31 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT 
    	A_BALISE.A_ID, 
    	COUNT(A_BALISE.BALISE_ID)
    FROM A_BALISE 
    	INNER JOIN BALISE 
    		ON A_BALISE.BALISE_ID = BALISE.BALISE_ID 
    WHERE BALISE.BALISE_CODE IN ('B1', 'D31')
    GROUP BY 
    	A_BALISE.A_ID
    HAVING COUNT(A_BALISE.BALISE_ID) = 2
    Les tables sont minimales, l'utilisation des index possible et les traitements simplifiés.

    Et merci aux participants pour les évals négatives sur ma critique de votre modélisation, je suis comblé

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 315
    Points : 202
    Points
    202
    Par défaut
    Cette solution est en effet tout à fait viable. Je vais y réfléchir.
    Merci

  9. #9
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Vu votre précédente interrogation sur les performance et la volumétrie, je vous invite à tester les deux modélisations/requêtes avec une volumétrie de 100000 fichiers et 5000 balises.

    Je serais heureux de voir les résultats pour voir si je mérite ou non ma critique .

    Projetez vous et réfléchissez à la tête des requêtes pour analyser les données par balise avec la première modélisation. Je vous souhaite bien du plaisir.

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 315
    Points : 202
    Points
    202
    Par défaut
    Il est clair que ma "solution" ne tient pas la route face à la votre, c'était une solution dite de facilité, qui j'en conviens ne respecte pas du tout le principe de modélisation.

    Encore une fois, je ne suis pas doué en SQL, je ne suis même pas informaticien, donc vos conseils sont plus que bienvenus.

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

Discussions similaires

  1. Extraire les enregistrements ayant un champ identique
    Par laraki.fissel dans le forum Requêtes
    Réponses: 6
    Dernier message: 05/05/2014, 14h25
  2. Réponses: 2
    Dernier message: 21/06/2011, 12h06
  3. [SQL] extraire les enregistrements différents de 2 tables (access 2000)
    Par DonQuiShoote dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 29/11/2006, 08h58
  4. Compter les occurences d'un car dans une chaine/variable
    Par sherlockfr dans le forum Windows
    Réponses: 2
    Dernier message: 10/11/2005, 07h48
  5. recuperer certains temes dans une chaine de caractere
    Par leviathan516 dans le forum ASP
    Réponses: 2
    Dernier message: 15/10/2004, 10h42

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