2012-07-09 10 views
1

Disons que, par exemple, que vous avez une chaîne aléatoire dans le DB: APKHDPRechercher des caractères dans une chaîne avec MySQL

Je veux rechercher toutes les chaînes qui contiennent les caractères PHP (dans cet ordre) . Donc, je recherche PHP et il renvoie la chaîne ci-dessus. Ou je recherche HPP, et il ne renvoie rien.

Existe-t-il une solution simple pour rendre cela possible, peut-être en utilisant REGEX? Cela semble très simple. Mais les réponses que je trouve sont massivement complexes jusqu'à présent. Je l'utilise avec PHP (d'où l'exemple!), Et je suis heureux d'intégrer PHP dans la solution si c'est la meilleure solution.

+0

Ne pouvez-vous pas simplement utiliser un select like? Peut-être que je manque quelque chose: select * from myTable où myField aime '% PHP%' –

+0

Pour autant que je l'ai eu, ce n'est pas une question liée à PHP. Si vous avez un contenu de champ aléatoire et que vous souhaitez afficher uniquement les lignes qui correspondent à une chaîne particulière, utilisez: SELECT * FROM table WHERE champ LIKE "% PHP%"; – Ron

+0

Il semble que LIKE n'est pas bon pour la question, car ils veulent correspondre à un modèle, plutôt que d'une chaîne fixe ou partielle. – Codecraft

Répondre

2
SELECT * FROM table WHERE text_field REGEXP '.*P.*H.*P.*' 

Le doc.

+0

xdazz, vous êtes une star. Merci beaucoup. Je viens juste de passer en revue le format avec mon cheat REGEX et c'est tout à fait logique maintenant. Agréable et simple aussi. Juste ce que je cherche. – user1100149

2

Utilisez une expression régulière MySQL - vous pouvez faire correspondre les choses, mais ne peut pas remplacer - par exemple:

SELECT 'APKHDP' REGEXP ('[PHP]')

Returns '1' (c.-à- , l'expression rationnelle correspondait à la chaîne).

Bien que l'expression régulière ci-dessus ne corresponde peut-être pas à vos besoins (elle correspond à l'utilisation des lettres P, H et P), vous devrez donc modifier cela.

Vous pouvez rendre votre regex plus compliqué, ou vous pouvez faire plusieurs matches:

SELECT field FROM TABLE WHERE field REGEXP(match1) AND field REGEXP(match2)..etc 

Quel que soit votre semble plus simple à ...

Lien: MySQL Manual for REGEXP

+0

Je pensais dans ce sens d'abord. Et je suppose que ça marcherait, même si c'est un peu compliqué. Appréciez la réponse si. Toute solution est meilleure que pas de solution! – user1100149

0
SELECT * 
FROM `COLUMNS` 
WHERE `TABLE_NAME` 
REGEXP 'APKHDP' 
+0

Malheureusement, cela renvoie la chaîne exacte. Comme avec LIKE. – user1100149

Questions connexes