2010-03-26 22 views
51

Mam tabelę mysql, która ma kolumnę, która przechowuje xml jako ciąg znaków. Muszę znaleźć wszystkie krotki, w których kolumna xml zawiera dany ciąg 6 znaków. Nic innego się nie liczy - wszystko, co muszę wiedzieć, to to, czy ten ciąg znaków zawiera 6 znaków.Wyszukaj ciąg znaków w kolumnie tekstowej w MySQL

Prawdopodobnie nie ma znaczenia, że ​​tekst jest sformatowany jako xml.

Pytanie: jak mogę przeszukiwać w mysql? czyli SELECT * FROM items WHERE items.xml [contains the text '123456']

Czy jest jakiś sposób, aby użyć tego operatora LIKE, aby to zrobić?

+0

Skorzystaj z tego: http://winashwin.wordpress.com/2012/08/28/mysql-search/ –

Odpowiedz

78

Można chyba użyć LIKE clause zrobić jakieś proste dopasowanie wyrażenie:

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

Jeśli potrzebujesz bardziej zaawansowanych funkcji, przyjrzeć się funkcji pełny-wyszukiwania MySQL tutaj: http://dev.mysql.com/doc/refman/5.1/en/fulltext-search.html

+1

.. w jaki sposób zmodyfikowałbym to do użycia z zapytaniem PHP? Mam ciąg '$ message' i chciałbym wybrać wiersz z tym dokładnie ciągiem. Mam SELECT * FROM Messages WHERE from_id = '$ fromID' AND to_id = '$ toID' AND message LIKE '$ message'' ale nie sądzę, że działa – Hristo

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

Operator % w LIKE oznacza "wszystko może być tutaj".

2

chodziło Ci o:

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

czy tęskniłeś za LIKE? – alex

+0

Przesłano zmianę ... miał brakującą LIKE –

2

Dlaczego nie używać jak?

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

Korzystanie z funkcji podobnej może zająć więcej czasu, więc użyj polecenia pełny_tekst_wyszukaj

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

Czy to jest sprawdzone, że jest szybsze niż LIKE? –