Requête mysql avec REGEX

joboy84 Messages postés 21 Date d'inscription   Statut Membre Dernière intervention   -  
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   -
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

2 réponses

Zero
 
Hello,

Peut être comme ça :
$datas = $database->pdo->prepare('SELECT * FROM jeux_concours WHERE categorie REGEXP (^|,)'.$cat.'($|,)');
1
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
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
0
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
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
0