Menu

Requête mysql avec REGEX

Messages postés
16
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
17 avril 2019
-
Bonjour,

J'ai un formulaire de recherche.

Dans ma base de données, ces dernières sont sous le format de chiffres séparés d'une virgule (1,11,15)

Pour retrouver les lignes contenant le chiffre 1 j'ai fais dans phpmyadmin:

SELECT * FROM jeux_concours WHERE categorie REGEXP (^|,)1($|,)


Ce code fonctionne, mais j'ai du mal à le faire fonctionner dans mon code php...

J'ai essayé '.(^|,)$cat($|,).' mais ca ne fonctionne pas.

$datas = $database->pdo->prepare(('SELECT * FROM jeux_concours WHERE categorie REGEXP "(^|,)$cat($|,)"');


Comment faire ?

Merci
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
1
Merci
Hello,

Peut être comme ça :
$datas = $database->pdo->prepare('SELECT * FROM jeux_concours WHERE categorie REGEXP (^|,)'.$cat.'($|,)');

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 40371 internautes nous ont dit merci ce mois-ci

Reivax962
Messages postés
3360
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
24 avril 2019
1177 -
Ah mais oui, je n'avais pas fait gaffe aux guillemets et j'avais lu trop vite... J'ai cru que c'était la requête qui posait problème, pas le php... +1
Commenter la réponse de Zero
Messages postés
3360
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
24 avril 2019
1177
0
Merci
Bonjour,

L'utilisation d'une Regex se justifie-t-elle vraiment ? Dans l'exemple que tu donnes, non, mais peut-être fais-tu des choses plus compliquées derrière.

Personnellement, j'aurais répondu à ton problème de la façon suivante :
SELECT * FROM jeux_concours WHERE categorie LIKE '1,%' OR categorie LIKE '%,1' OR categorie LIKE '%,1,%'

Je ne vois pas de façon plus simple.
La méthode "propre" consisterait à transformer le champ categorie en table (en utilisant une fonction à créer) et faire une requête standard dessus.

Xavier
Commenter la réponse de Reivax962