2012-06-19 20 views
13

Ho sempre pensato che fosse possibile utilizzare OR in uno stato LIKE per eseguire query in MySQL. Quindi, se ho voluto confrontare più campi di fila per 1 parola chiave o un termine:Utilizzo di OR in LIKE Query in MySQL per confrontare più campi

SELECT * FROM MyTable WHERE Column1 OR Column2 LIKE '%keyword%'; 

e se ho avuto una serie di parole per confrontare:

SELECT * FROM MyTable WHERE Column1 OR Column2 LIKE '%keyword1%' 
AND Column1 OR Column2 LIKE '%keyword2%'; 

Non credo che la sintassi è corretto, comunque. C'è un metodo efficace di scrivere questo oltre a qualcosa di simile:

SELECT * FROM MyTable WHERE Column1 LIKE '%keyword1%' OR Column2 LIKE 
'%keyword1%' AND Column1 LIKE '%keyword2%' OR Column2 LIKE '%keyword2%'; 

Sto andando su questo correttamente?

+0

Mi sto solo interrogando sull'algoritmo della "matrice di parole" ... Sei sicuro di voler recuperare i risultati se una colonna è come una parola E se una colonna è come un'altra? Mi sembra abbastanza inefficiente per me – Sebas

+0

puoi anche usare le procedure. – vijay

+0

Le parole chiave provengono da un campo di ricerca, quindi gli utenti vorranno cercare un database in base a molti campi. Se usano 2 parole nel loro termine di ricerca, ha ancora senso cercare in entrambe le colonne questo termine. Non voglio escludere un campo perché esiste la possibilità che contengano più parole correlate. – RCNeil

risposta

21

Utilizzare questo ::

SELECT * FROM MyTable WHERE (Column1 LIKE '%keyword1%' OR Column2 LIKE 
'%keyword1%') AND (Column1 LIKE '%keyword2%' OR Column2 LIKE '%keyword2%'); 
+0

ah. Prendo che le parentesi sono necessarie? Questo spiegherebbe perché non funzionava prima .... – RCNeil

+1

sì..la priorità di AND è superiore a OR quindi le parentesi sono necessarie ... –

+0

impressionante. grazie mille per la tua risposta! – RCNeil

17

Il più vicino alla sintassi che si sta desiderando è:

SELECT * FROM MyTable 
WHERE (CONCAT(Column1, Column2) LIKE '%keyword1%') 
AND (CONCAT(Column1, Column2) LIKE '%keyword2%') 

Nota: che il "%" all'inizio della stringa di ricerca preclude l'uso di indici. Se esiste un numero elevato di record da cercare, è consigliabile ripensare l'implementazione.

+0

Grazie per la tua risposta! – RCNeil

+1

Se si aggiungono due colonne di caratteri, verranno cast come numeri e aggiunti. Molto probabilmente, il risultato sarà zero e la tua clausola WHERE non valuterà mai la verità. Per concatenare le colonne in MySQL, utilizzare CONCAT. –

+0

Grazie per questo, ho aggiornato l'SQL per utilizzare CONCAT() ... – Mazrick

Problemi correlati