Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] Coś w stylu "LIKE IN()"
Forum PHP.pl > Forum > Bazy danych
franki01
Witam.

W klauzuli WHERE chciałem zamieścić listę wzorców pasujących do pola `field`, czyli np.
Kod
'%jeden%' , '%dwa%' , '%trzy%' , '%cztery%' (itd)


MySQL nie zawiera funkcji LIKE IN() (LIKE dla wzorców i IN() dla listy), więc nie mogę zrobić czegoś takiego:

  1. SELECT * FROM `table` WHERE `field` LIKE IN ('%jeden%' , '%dwa%' , '%trzy%' , '%cztery%')


Czy istnieje jakiś prosty sposób, żeby otrzymać taki sam efekt NIE robiąc takiego czegoś:

  1. SELECT * FROM `table` WHERE `field` LIKE '%jeden%' OR `field` LIKE '%dwa%' OR `field` LIKE '%trzy%' OR `field` LIKE '%cztery%'


To zapytanie będzie za bardzo obciążać bazę danych, bo aplikacja ma być wykorzystywana dość często, dlatego szukam rozwiązania, które zminimalizuje stratę wydajności.
wipo
like to obciazy baze strasznie ale jednak zobacz to:

  1. SELECT pole FROM tabela WHERE pole IN (SELECT concat('%',pole2,'%') FROM tabela2)
nevt
możesz użyć wyrażeń regularnych, dla twojego przykładu będzie to coś w rodzaju:
  1. SELECT * FROM `table` WHERE `field` REGEXP 'jeden|dwa|trzy|cztery';

powodzenia.
franki01
Cytat(wipo @ 22.06.2008, 20:13:08 ) *
like to obciazy baze strasznie ale jednak zobacz to:

  1. SELECT pole FROM tabela WHERE pole IN (SELECT concat('%',pole2,'%') FROM tabela2)

Nie o to chodziło smile.gif Nie mam potrzebnych wartości w innej tabeli. W dodatku z tego, co tu widzę, te znaczki '%' i tak by nie zadziałały.


Cytat(nevt @ 23.06.2008, 07:52:07 ) *
możesz użyć wyrażeń regularnych, dla twojego przykładu będzie to coś w rodzaju:
  1. SELECT * FROM `table` WHERE `field` REGEXP 'jeden|dwa|trzy|cztery';

powodzenia.

No tak, zapomniałem o wyrażeniach regularnych smile.gif Teraz ładnie działa.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.