SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'REGEXP '[[:<:]]Men[[:>:]]')' at line 1 (SQL: select count(*) as aggregate from items where item_status = ? and (tags LIKE REGEXP '[[:<:]]Men[[:>:]]')) (Bindings: array ( 0 => 2, ))
3 Réponses :
Dans votre requête, vous avez dit: Trouvez tout ce qui contient la balise 'Hommes' => '% Men%' Code>, c'est pourquoi il montre: femmes et hommes, afin de répondre à votre question que vous devriez Utilisation commence avec au lieu de contient, comme ceci:
$query->where('tags', 'LIKE', $uID.'%');
Toutes mes excuses de ne pas donner un exemple de tags femmes, chaussures, hommes, coin (n'a pas de sens) mais oui
Voir ce n'est-il pas saisir parce que avant le mot les hommes, il n'a pas de carte sauvage. Mais avant cela, c'est une virgule
-> Où (fonction ($ (Query) utilise ($ QueryRarR) {Foreach ($ QueryRarR as $ UID) {$ Query-> ou où ('Tags', "comme", $ uid. "% ');}
Lol tu ne comprends pas du tout, pourquoi répondre quand tu ne comprends pas? Vous dites% faux% que diable, s'il s'agit de% des hommes%, il appellerait les données des femmes qui sont ce qu'il essaie de résoudre. Lol tu donnes son problème comme solution? Quoi?
Si des valeurs sont séparées par des virgules, essayez d'utiliser la suite
WHERE `tags` REGEXP "(^|,)men(,|$)"
Pour la première et dernière balise, il placerait l'espace à l'avant et la dernière étiquette, espace à la fin. Cela fonctionnerait toujours?
J'avais des valeurs suivantes: "hommes", "femmes", "femmes, hommes", hommes ", femmes", "chiens, hommes, oiseaux". J'ai rencontré la requête suivante: Select * à partir de test code> où
tags code> regexp "(^ |,) hommes (, | $)" Et cela m'a renvoyé tous les enregistrements sauf "Femmes". Comme cela devrait être. Vérifié sur mysql. Vous pouvez donner plus d'exemples et je peux vérifier la requête sur eux.
Qu'en est-il des hommes, des chaussures, sac
@Flyingatom, il est sélectionné
@AlexeMatskoff Mais vous avez dit "Cela nécessitera une virgule ou une fin de ficelle autour du mot hommes."
J'ai également testé ma requête sur tous les exemples ci-dessus + copie d'eux avec "Hommes" remplacés par "Femmes". Cela a fonctionné bien.
@Flyingatom Peut-être que mes mots ne sont pas assez clairs =) désolé si oui.
@Flyingatom, il voulait dire que avec cette regex, il ne correspondra que
@AlexeMatskoff, donc si mes tags sont comme des hommes, des chaussures, la chemise, votre regex peut aussi l'attraper? Parce que avant que les hommes ne reçoivent pas de virgule mais que vous semble le faire nécessiter. J'ai essayé la maison, la décoration, les hommes, il ne détecte pas les hommes
@CODEGURU, oui, il devrait également saisir de telles valeurs. Voici mon Exemples et voici le Résultats de la requête
hommes code> s'il y a une virgule ou rien au début / fin du mot. Qui est exactement ce que l'OP a besoin.
Votre solution REGEXP lance l'erreur de syntaxe en raison du mot clé supplémentaire comme. La syntaxe correcte est simplement Si vous trouvez que cela est difficile à retenir, essayez d'utiliser Rignement à la place, ce qui est synonyme de REGEXP de MySQL. Il y a moins de chances que vous écris accidentellement Le motif lui-même devrait fonctionner bien. Personnellement, je n'aime pas utiliser ces classes de limites de mots dans MySQL; Depuis que vous savez que vos tags sont délimités et spacieux, Si vous souhaitez utiliser plusieurs balises de mots avec des espaces, l'un des schémas précédents est la buggy. Dans ce cas, j'essaierais de rester avec des virgules comme votre délimiteur, débarrassez-vous du rembourrage des espaces et utilisez plutôt des ancrages, comme suggéré dans l'une des autres réponses: où la colonne REGEXP 'motif' code>. P>
où colonne comme ripe ... code> dans votre requête parce qu'il est évidemment redondant. P>
[] man [] code> fonctionnerait aussi bien. Le mot de la classe limite se casse à la ponctuation autre que les traits de soulignement, vous pouvez donc avoir des problèmes si vous avez des étiquettes hyphogènes, par exemple. P>
(^ |,) Man ($ |,) Code> p>
Pouvez-vous nous montrer un exemple de la valeur des balises
code>?
Parce que lorsque vous utilisez% des hommes%, des femmes reviendront. Aussi nomen retournera vrai. Tout se termine avec les hommes reviendra vrai ..
Avez-vous une liste séparée de l'espace des balises dans le champ
Tags CODE>?
@Alexeymatskoff Commas, juste mis à jour.
@LukasgeiterIriter juste mis à jour.
@geekido ouais c'est la question que j'essaie de faire face
Utilisez ensuite où Tags = '. $ UID.' pour certaines choses.
@Geekido mais tout droit après la Parole, j'ai une virgule, ça marche toujours de cette façon?
Une des raisons pour lesquelles vous ne devriez pas utiliser la liste séparée des virgules. C'est désordonné.
Cela vous permettrait de penser à recréer vos tables et d'utiliser
clé étrangère code> (si votre dB est comme "
innodb code>") - est mon avis.