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

PHP & Base de données Discussion :

Rechercher un ID dans un champs à plusieurs ID [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 45
    Par défaut Rechercher un ID dans un champs à plusieurs ID
    Bonsoir,

    Je rencontre un problème de recherche en cherchant un ID dans un champs comportant plusieurs ID séparé par des virgules.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CHAMP (tag) = ID,ID,ID,ID
    Je recherche l'ID 9 dans le champs tag.
    Résultat il me retourne toutes les lignes qui comportent un 9 (ID 9, ID 19, ID 29...) alors que je souhaite seulement avoir les lignes qui comporte l'ID précis 9.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM '.table_projects.' WHERE tag LIKE "%9%"
    Merci d'avance.

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonsoir

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM table_projects WHERE tag= '9'

    A+.

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Très mauvaise conception en somme.

    Bref, en l'état, fonction FIND_IN_SET (WHERE FIND_IN_SET('9', tag) > 0 ?), une expression régulière (WHERE tag REGEXP '(^|,)9(,|$)' ?) ou "semblable" (WHERE CONCAT(',', tag, ',') LIKE ',9,' voir WHERE LOCATE(',9,', CONCAT(',', tag, ',')) > 0 ?)

  4. #4
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 45
    Par défaut
    Citation Envoyé par julp Voir le message
    Très mauvaise conception en somme.
    Que voulez vous dire par là ?

    Je suis ouvert aux idées extérieur pour faire avancer mon projet donc n'hésitez pas.

    Merci

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 183
    Par défaut
    Citation:
    Envoyé par julp Voir le message
    Très mauvaise conception en somme.

    Que voulez vous dire par là ?
    Qu'il faut revoir les bases de merise ... concaténer des id par des virgules c'est bon pour du csv, par contre une base de données comme MySQL par exemple est relationnelle.

  6. #6
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 45
    Par défaut
    Il serait donc préférable de recréer une table qui contiendrait tout les tags (ligne par ligne) associé à chaque projet ?

    Soit un CHAMP TAG_ID et un CHAMP PROJECT_ID ?

  7. #7
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    Certainement, enfin peut-être car il est impossible de te donner un schéma sans connaître le cahier des charges de ton projet.

    Cela dit un id est normalement conçu pour identifier une ligne d'enregistrement dans une table. Si tu en met plusieurs dans un même champ, ça pose des pb niveau logique pour faire des recherches et identifier cette ligne ou alors tu donne à cette valeur un sens que nous ne comprenons pas.

    Sans même aller jusqu'à utiliser "merise" il serait peut-être prudent de mettre ton projet à plat avant d'aller plus loin car la requête que tu dois faire est assez inquiétante à première vue.

  8. #8
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 45
    Par défaut
    Je vais au final utiliser 3 tables différentes :

    - Table_projects: 1 CHAMP PROJECT_ID, ...
    - Table_relation (pour les tags): 1 CHAMP PROJECT_ID, 1 CHAMP TAG_ID
    - Table_tags: 1 CHAMP TAG_ID, 1 CHAMP TAG_NAME, ...

    Cela donne: TAG_NAME -> TAG_ID -> recherche dans table_relation -> résultat -> seulement les projets avec ID précis.

    Il y a t'il plus simple ou d'autres méthodes ?

  9. #9
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 219
    Par défaut
    il serait plus simple de nous faire voir chaque table avec la liste des champs au complet. d'autre à te comprendre:
    - si il ya plusieur 9 dans les champs, peut etre tu as pris le id comme une clé secondaire dans ta table, et que ta clé n'est pas unique.
    - soit la composition de tes clés sont constituer de la meme maniere.

    dans ta table relation, obligatoirement, il y a aura plusieurs id de me genre,
    essayer de revoir tes relations, il ya pas tes erreurs dans tes cardinalités.

    si tu peux donner la liste complete des champs de chaque table, sera facilite la comprehension.

  10. #10
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par Plougy Voir le message
    Je vais au final utiliser 3 tables différentes :

    - Table_projects: 1 CHAMP PROJECT_ID, ...
    - Table_relation (pour les tags): 1 CHAMP PROJECT_ID, 1 CHAMP TAG_ID
    - Table_tags: 1 CHAMP TAG_ID, 1 CHAMP TAG_NAME, ...

    Cela donne: TAG_NAME -> TAG_ID -> recherche dans table_relation -> résultat -> seulement les projets avec ID précis.

    Il y a t'il plus simple ou d'autres méthodes ?
    C'est en effet la bonne modélisation. Elle correspond à la règle de gestion suivante :
    Un projet peut avoir plusieurs tags et un tag peut se rapporter à plusieurs projets.

    Ce qui donne le MCD (méthode Merise) suivant :
    Projet -0,n----Avoir----0,n- Tag

    Et avec une association de type (0,n - 0,n), il faut en effet une table associative dont la clé primaire est composée des identifiants des tables entrant en jeu dans l'association.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 confirmé
    Inscrit en
    Janvier 2007
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 219
    Par défaut
    Bonsoir
    à mon avis, il faut revoir ton MCD,

    je pense que tu dois avoir une relation comme telle:
    Projet -0,n----Avoir---- 1,1- Tag

    car, un tag n'existe que si il est appartient à projet.

  12. #12
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par kitcarson23 Voir le message
    un tag n'existe que si il est appartient à projet.
    Est-ce qu'un tag ne se rapporte qu'à un seul projet ou peut-il se rapporter à plusieurs projets, c'est à Plougy de le dire.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 !

  13. #13
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    Je parie sur CinePhil

  14. #14
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 45
    Par défaut
    Merci pour l'ensemble de vos réponses, c'est très appréciable d'avoir des retours.

    Citation Envoyé par CinePhil Voir le message
    Un projet peut avoir plusieurs tags et un tag peut se rapporter à plusieurs projets.
    Oui c'est exactement ça !

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

Discussions similaires

  1. [DAO]type non défini / recherche valeur max dans un champ
    Par petitours dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 23/04/2007, 09h59
  2. Recherche de mots dans un champ
    Par dechampfleury dans le forum Access
    Réponses: 3
    Dernier message: 23/01/2007, 10h37
  3. [VBA] Rechercher et remplacer dans un champs
    Par virginie2 dans le forum Access
    Réponses: 2
    Dernier message: 19/07/2006, 11h19
  4. Comment rechercher le symbol % dans un champ?
    Par nmathon dans le forum Oracle
    Réponses: 3
    Dernier message: 18/01/2006, 17h01
  5. Recherche d'enregistrments dans un champs
    Par Marie D dans le forum Access
    Réponses: 16
    Dernier message: 19/09/2005, 09h01

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