Domanda

Ho la seguente query MySQL:

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

Questo funziona bene per ipotesi, ma se si fornisce una corrispondenza esatta: "Bill Clinton" fname = bolletta lname = Clinton alla query precedente si ottiene 0 risultati? dove Bill Clint dà risultati.

Come può essere aggiornato interrogazione dire trovare COME risultato e pari a risultati?

È stato utile?

Soluzione

Difficile da dire dalla tua domanda, ma sto cercando di indovinare la vostra tavola clienti avrà un aspetto simile:

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

la tua ricerca, come hai affermato che nella sua interrogazione, non funzionerà mai, in quanto sarà simile a questa:

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

Non ci sono record nella tabella in cui i campi FName O LName contengono "Bill Clinton"

Si dovrà massaggiare il vostro # # attributes.q testo in modo che sarà generare qualcosa di simile:

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

COME I confronti sono molto simili utilizzando i caratteri jolly nei nomi dei file. Essi non dividere un blocco di testo per voi, ma vi dirà se una porzione di testo esiste, parola per parola, all'interno di un altro pezzo di testo.

Credo che quello che vi serve è un ricerca full-text , che prenderà in considerazione le singole parole in una stringa di query e restituire i risultati. Naturalmente, FULLTEXT è disponibile solo su tipi di tabelle MyISAM, quindi se si sta utilizzando InnoDB o qualche altro tipo, sei fuori di fortuna.

Altri suggerimenti

A proposito - Gli indici full-text possono essere utilizzati solo con le tabelle InnoDB o MyISAM, e possono essere creati solo per CHAR, VARCHAR, o colonne di testo

.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top