Bonjour a tous
J’ai besoin de votre aide sur une requete mysql.
Je bosse sur un filtre de recherche PHP. Via Post/Get je recupere une variable et j’essaie de trouve un ou plusieurs resultats dans ma bdd.
En gros j’ai des categories et des sous categories, l’admin peut mettre une ou plusieurs categories et sous-categories lorsqu’il remplis un article.
Exemple de categories/sous-categories :
- toto
— toto-1
— toto-2
— toto-2-plus
- tata
— tata-1
— tata-2
Quand l’admin choisit plusieurs categories, on fait une string en JS et on l’enregistre dans la colonne qui va bien. Ca donne ca :
« toto,toto-1,tata,tata-2 »
Je galere a faire des recherches exactes. L’utilisateur en front ne peut choisir qu’une seule categorie ou sous-categorie a la fois, donc il peut choisir « toto » ou « toto-1 » ou « tata » mais pas les trois en meme temps.
La ou je galere, c’est pour differencier « tata » de « tata-* ». Je suis partie sur une requete avec la commande REGEX.
SELECT `table`.*
FROM `table`
WHERE (categorie REGEXP BINARY "([:comma:]{1}|^)tata([:comma:]{1}|$)")
Avec cette requete, j’essaie de dire :
- Soit le mot recherche commence par une virgule
- Soit le mot recherche est le debut de la string
Puis
- Soit le mot recherche est la fin de la string
- Soit le mot recherche se termine par une virgule
Pour le moment je ne trouve rien … en attendant, j’ai une autre syntaxe qui fait tourner le truc mais qui ne fait pas la difference en tata et tata-* , c’est nul
Si vous avez des idees, je suis preneur.
Partager