nom MySQL LIKE « % # attributes.q #% » - Ne renvoie aucune résultat pour une correspondance exacte?

StackOverflow https://stackoverflow.com/questions/2441347

Question

J'ai la requête MySQL suivante:

SELECT  *
FROM    customer
WHERE   
fName LIKE '%#attributes.q#%' AND deleted = 'N'
OR 
lName LIKE '%#attributes.q#%' AND deleted = 'N'

Cela fonctionne très bien pour des suppositions, mais si vous fournissez une correspondance exacte: « Bill Clinton » fname = facture lname = clinton à la requête ci-dessus vous obtenez 0 résultats? où facture clint donne des résultats.

Comment cette requête peut être mis à jour pour dire trouver comme résultat et EQUAL aux résultats?

Était-ce utile?

La solution

Difficile à dire de votre question, mais je devine votre table de clients ressemblera à quelque chose comme:

id    fName    lName      deleted
---------------------------------
1     John     Doe        N
2     Bill     Clinton    N
3     Fred     Smith      N
4     George   Bush       Y

Votre requête, comme vous l'avez dit dans votre question, ne fonctionnera jamais, car il ressemblera à ceci:

SELECT *
FROM customer
WHERE fname LIKE '%Bill Clinton%' AND deleted = 'N'
OR
  lName LIKE '%Bill Clinton%' AND deleted = 'N'

Il n'y a pas de dossiers dans la table où les champs FNAME OU lName contiennent "Bill Clinton"

Vous devrez masser votre # attributes.q texte # il va générer quelque chose comme ceci:

SELECT *
FROM customer
WHERE ((fName LIKE '%Bill%') OR (fName LIKE '%Clinton%')) AND deleted = 'N'
OR
   ((lName LIKE '%Bill%') etc.....

Comme les comparaisons sont très semblable à l'aide de caractères génériques dans les noms de fichiers. Ils ne vont pas diviser un bloc de texte pour vous, mais vous dira si un morceau de texte existe, mot pour mot, dans un autre morceau de texte.

Je pense que ce dont vous avez besoin est un recherche FULLTEXT , qui examinera les mots individuels dans une chaîne de requête et obtenir des résultats. Bien sûr, FULLTEXT est uniquement disponible sur les types de tables MyISAM, donc si vous utilisez InnoDB ou un autre type, vous êtes hors de la chance.

Autres conseils

Pour votre information - Les index de texte peuvent être utilisés uniquement avec des tables InnoDB ou MyISAM et peuvent être créés que pour CHAR, VARCHAR ou colonnes TEXT

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top