MySQL-Name LIKE '%#attributes.q#%' – Gibt kein Ergebnis für eine genaue Übereinstimmung zurück?

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

Frage

Ich habe die folgende MySQL-Abfrage:

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

Dies funktioniert gut für Vermutungen, aber wenn Sie eine genaue Übereinstimmung angeben:„Bill Clinton“ fname=bill lname = clinton Für die obige Abfrage erhalten Sie 0 Ergebnisse?wo Bill Clint Ergebnisse liefert.

Wie kann diese Abfrage aktualisiert werden, um LIKE-Ergebnisse und EQUAL TO-Ergebnisse zu finden?

War es hilfreich?

Lösung

Anhand Ihrer Frage ist das schwer zu erkennen, aber ich vermute, dass Ihre Kundentabelle in etwa so aussehen wird:

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

Ihre Anfrage, wie Sie sie in Ihrer Frage angegeben haben, wird niemals funktionieren, da sie so aussehen wird:

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

Es gibt keine Datensätze in der Tabelle, in denen die Felder „fName“ ODER „lName“ „Bill Clinton“ enthalten.

Sie müssten Ihren #attributes.q#-Text massieren, damit etwa Folgendes generiert wird:

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

LIKE-Vergleiche ähneln stark der Verwendung von Platzhaltern in Dateinamen.Sie teilen keinen Textblock für Sie auf, sondern sagen Ihnen wörtlich, ob ein Textblock innerhalb eines anderen Textblocks vorhanden ist.

Ich denke, was Sie brauchen, ist ein Volltextsuche, das einzelne Wörter in einer Abfragezeichenfolge berücksichtigt und Ergebnisse zurückgibt.Natürlich ist FULLTEXT nur für MyISAM-Tabellentypen verfügbar. Wenn Sie also InnoDB oder einen anderen Typ verwenden, haben Sie Pech.

Andere Tipps

FYI - Volltextindizes können nur mit Innodb- oder MyISAM -Tabellen verwendet und nur für Zeichen für Zeichen, VARCHAR oder Text erstellt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top