2010-03-25 14 views
25

Sto cercando di creare una funzione di ricerca che cercherà più colonne per trovare una corrispondenza basata su parole chiave. La seguente interrogazione:Come cercare più colonne in MySQL?

SELECT title FROM pages LIKE %$query%; 

funziona solo per la ricerca di una colonna, ho notato che separa i nomi delle colonne con virgole genera un errore. Quindi è possibile cercare più colonne in mysql?

risposta

30

È possibile utilizzare gli operatori AND o OR, a seconda di cosa si desidera che la ricerca restituisca.

SELECT title FROM pages WHERE my_col LIKE %$param1% AND another_col LIKE %$param2%; 

Entrambe le clausole devono corrispondere per un record da restituire. In alternativa:

SELECT title FROM pages WHERE my_col LIKE %$param1% OR another_col LIKE %$param2%; 

Se una clausola corrisponde, il record verrà restituito.

Per ulteriori informazioni su cosa è possibile fare con le query MySQL SELECT, provare lo documentation.

+0

Quali sono i parametri con lo stesso valore? Di ', stai cercando se' Steven 'è nel primo OR del cognome di un utente? (Dato che gli utenti sono una tabella, last_name e first_name sono colonne.) – onebree

+1

@HunterStevens In tal caso, consultare [questa altra risposta a questa domanda] (http://stackoverflow.com/a/30365428/2908724). – bishop

12

Se la tabella è MyISAM:

SELECT * 
FROM pages 
WHERE MATCH(title, content) AGAINST ('keyword' IN BOOLEAN MODE) 

Questo sarà molto più veloce se si crea un indice FULLTEXT sulle colonne:

CREATE FULLTEXT INDEX fx_pages_title_content ON pages (title, content) 

, ma funzionerà anche senza l'indice.

+2

Questo è un bene, ma funziona solo su corrispondenze esatte, una ricerca per i cani non restituirà una pagina intitolata cane. – George

+1

No, puoi utilizzare il carattere jolly "cane *" per abbinare "cani" e "cane". anche se non puoi usare '* dog' per ottenere 'adog'. Sono supportati solo i caratteri jolly prepending. – DavidLin

33

Se è solo per la ricerca, potrebbe essere possibile utilizzare CONCATENATE_WS. Ciò consentirebbe la ricerca con caratteri jolly. Ci possono essere problemi di prestazioni a seconda delle dimensioni della tabella.

SELECT * 
FROM pages 
WHERE CONCAT_WS('', column1, column2, column3) LIKE '%keyword%' 
+1

Ha! Inciampato su questo. Piccolo trucchetto. Grazie! – raupach

+1

Fai attenzione quando ti iscrivi a CONCAT -https: //www.percona.com/blog/2007/10/16/be-careful-when-joining-on-concat/ – londox

-1
SELECT * FROM persons WHERE (`LastName` LIKE 'r%') OR (`FirstName` LIKE 'a%'); 

Si prega di provare con sopra query.

1

1)

select * 
from employee em 
where CONCAT(em.firstname, ' ', em.lastname) like '%parth pa%'; 

2)

select * 
from employee em 
where CONCAT_ws('-', em.firstname, em.lastname) like '%parth-pa%'; 

In primo luogo è utile quando abbiamo dati come: 'Nome Cognome'.

es

  • parth Patel
  • parth p
  • Patel parth

In secondo luogo è utile quando abbiamo dati come: 'Nome-cognome'. In esso puoi anche usare caratteri speciali.

e.g

  • parth-Patel
  • parth_p
  • Patel # parth
Problemi correlati