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 MySQL Discussion :

REGEXP ou %LIKE% ?


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9
    Par défaut REGEXP ou %LIKE% ?
    Bonjour,

    j'ai des tags dans une colonne de ma base de données sous la forme "4|32|42|3" à la base on m'a dit d'utiliser le %LIKE% seulement le problème si j'utilise le %LIKE% en faisait LIKE "%4%" ça peut me sortir les champs qui ne contienne que "42" et non "4", j'ai ensuite voulu être plus précis en mettant "%|4|%", mais le "4" peut se retrouver en début ou fin... Donc pas de séparateurs aux 2 endroits...

    A mon avis c'est impossible de le faire avec %LIKE% alors je me suis dit peut-être une REGEXP, est-ce que quelqu'un peut m'aider ? Si pas possible avec LIKE me fournir une REGEXP qui fera l'affaire ? :-)

    Merci d'avance.

  2. #2
    Membre émérite Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Par défaut
    Bonsoir,

    Je ne pourrais pas vous aider en REGEX, mais la meilleur solution à tout point de vue c'est d'avoir une table jointure.

    Si les tags concernent des produits par exemple (clés primaires soulignées, clés étrangères en italique) :

    Produit (produitId, produitNom)
    Tag (tagId, tagLibelle)
    Produit_Tag (produitId, tagId)

    Avec cette base de données (normalisée) vous pouvez faire ce que vous voulez avec du SQL très simple.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9
    Par défaut
    Merci pour votre réponse, je sais que cette solution est la meilleure, on me l'avait soumise, mais je n'aurai pas plus de 1000 entrées et je ne pense pas que ça risque d'arriver, j'ai donc tout su mettre dans une seule table... J'aimerai une solution pour le cas d'une table, je sais que c'est possible je préfère ne manipuler qu'une table tant qu'il n'y a pas besoin de plus...

    J'ai déjà manipuler plusieurs tables, mais dans ce cas j'ai du importer mes données via un fichier serialisé en PHP, donc ça serait trop long de refaire un script qui met dans une table indépendante les tags :-)

  4. #4
    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
    Ce n'est pas le nombre d'entrées qui est important mais justement la mauvaise structure de la BDD !

    Vous voilà obligé de faire appel à une fonction REGEXP ou LIKE qui est infiniment moins performante qu'une structure normalisée et des jointures !

    Avec la structure proposée par Oishiii, répondre à la question "Quels sont les produits qui ont pour tag 42 ?" est très simple et très performant, même avec des milliers de produits et des milliers de tags :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT p.produitId, p.produitNom
    FROM Produit AS p
    INNER JOIN Produit_Tag AS pt ON pt.produitId = p.produitId
    WHERE pt.tagId = 42
    A condition bien sûr qu'en plus de cette structure normalisée, les tables soient correctement indexées.
    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 !

Discussions similaires

  1. Utilisation spéciale de LIKE
    Par tonyskn dans le forum Langage SQL
    Réponses: 5
    Dernier message: 19/07/2024, 10h36
  2. LIKE avec Regexp
    Par piwozdiwect dans le forum Langage SQL
    Réponses: 5
    Dernier message: 09/10/2010, 13h10
  3. [PDO] PDO et REGEXP ou LIKE sur un parametre
    Par lounislounis dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 06/02/2010, 18h50
  4. [VB6] [ADO] Like sur base Access
    Par dlpxlid dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 24/01/2003, 11h03
  5. Créer un interpréteur de langage inspiré du Basic
    Par Picasso dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 11/05/2002, 17h10

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