Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [mysql] Coś w stylu "LIKE IN()"
franki01
post 22.06.2008, 18:40:28
Post #1





Grupa: Zarejestrowani
Postów: 508
Pomógł: 75
Dołączył: 2.11.2005
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


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.

Ten post edytował franki01 22.06.2008, 18:41:24
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
wipo
post 22.06.2008, 19:13:08
Post #2





Grupa: Zarejestrowani
Postów: 856
Pomógł: 19
Dołączył: 30.08.2005
Skąd: 100lica

Ostrzeżenie: (0%)
-----


like to obciazy baze strasznie ale jednak zobacz to:

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


--------------------
Go to the top of the page
+Quote Post
nevt
post 23.06.2008, 06:52:07
Post #3





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

Ostrzeżenie: (0%)
-----


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.


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
franki01
post 23.06.2008, 11:16:20
Post #4





Grupa: Zarejestrowani
Postów: 508
Pomógł: 75
Dołączył: 2.11.2005
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 18:23