Requête mysql avec REGEX

Fermé
joboy84 Messages postés 21 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 22 janvier 2020 - Modifié le 3 avril 2019 à 10:27
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 8 avril 2019 à 16:04
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

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 jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
8 avril 2019 à 16:04
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 jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
3 avril 2019 à 10:25
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