2010-03-26 10 views
51

Ho una tabella mysql che contiene una colonna che memorizza xml come stringa. Devo trovare tutte le tuple in cui la colonna xml contiene una determinata stringa di 6 caratteri. Nient'altro conta: tutto ciò che devo sapere è se questa stringa di 6 caratteri è presente o meno.Ricerca stringa all'interno della colonna di testo in MySQL

Quindi non importa che il testo sia formattato come xml.

Domanda: come posso cercare all'interno di mysql? ie SELECT * FROM items WHERE items.xml [contains the text '123456']

C'è un modo per utilizzare l'operatore LIKE per farlo?

+0

Riferisci questo: http://winashwin.wordpress.com/2012/08/28/mysql-search/ –

risposta

78

probabilmente si potrebbe utilizzare il LIKE clause per fare qualche semplice string matching:

SELECT * FROM items WHERE items.xml LIKE '%123456%' 

Se avete bisogno di funzionalità più avanzate, un'occhiata alle funzioni full-text-ricerca di MySQL qui: http://dev.mysql.com/doc/refman/5.1/en/fulltext-search.html

+1

.. come dovrei modificare questo da usare con una query PHP? Ho una stringa '$ message' e vorrei selezionare la riga con quella stringa esatta. Ho 'SELECT * FROM Messages WHERE from_id = '$ fromID' AND to_id = '$ toID' E messaggio LIKE '$ message'' ma non penso che funzioni – Hristo

5
SELECT * FROM items WHERE `items.xml` LIKE '%123456%' 

L'operatore % in LIKE significa "tutto può essere qui".

2

si vuol dire:

SELECT * FROM items WHERE items.xml LIKE '%123456%' 
+5

ti sei perso un LIKE? – alex

+0

Inviata una modifica ... mancava come –

2

Perché non usare COME?

SELECT * FROM items WHERE items.xml LIKE '%123456%' 
7

L'utilizzo di like potrebbe richiedere più tempo, quindi utilizzare full_text_search

Select * from items where match(items.xml) against ('your_search_word') 
+8

È dimostrato che sia più veloce di LIKE? –

Problemi correlati