Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL] IN czy LIKE
Forum PHP.pl > Forum > PHP
Randallmaster
Posiadam taką tabelę

id Nazwa
1 Rower koloru czerwonego
2 Rower jest czerwonego koloru
3 Rower koloru zielonego
4 Rower jest zielonego koloru

potrzebuje zrobić zapytanie sql aby wyciągnąć rekordy z tekstem 'rower','czerwonego'

select count(*) from table where name like '%rower%'

jak w powyższym zapytaniu dołożyć wartość 'czerwonego'
sowiq
Wyszuka rekordy z zawierające 'rower' LUB 'czerwonego'
  1. SELECT COUNT(*)
  2. FROM TABLE
  3. WHERE name LIKE '%rower%'
  4. OR name LIKE '%czerwonego%'


Wyszuka rekordy z zawierające 'rower' ORAZ 'czerwonego'
  1. SELECT COUNT(*)
  2. FROM TABLE
  3. WHERE name LIKE '%rower%'
  4. AND name LIKE '%czerwonego%'
Randallmaster
sowiq robiłem tak samo jak ty z drugim pomysłem ale myślałem* że można krócej to zapisać
Damonsson
Powinno się dać chyba jeszcze tak

  1. WHERE name REGEXP 'rower|czerwonego'
Dla LUB
  1. WHERE name REGEXP 'rower.+czerwonego'
Dla ORAZ
Randallmaster
regexp - nie uwzględnia czasami wielkości liter w wyrażeniu regularnym? ale po wynikach uzyskanych z bazy danych wygląda ok smile.gif
Damonsson
Będzie problem z polskimi znakami ;/ Którego chyba, się nie da obejść.
phpowiec84
Cytat(Damonsson @ 24.06.2013, 21:46:51 ) *
Powinno się dać chyba jeszcze tak

  1. WHERE name REGEXP 'rower|czerwonego'
Dla LUB
  1. WHERE name REGEXP 'rower.+czerwonego'
Dla ORAZ


jak zwykle *** 3 po 3 nie mając bladego pojęcia
Damonsson
Rozwiń proszę swą elokwentną wypowiedź i wytłumacz potomnym, jak bardzo wielką głupotę napisałem smile.gif
sowiq
Cytat(Randallmaster @ 24.06.2013, 21:38:15 ) *
sowiq robiłem tak samo jak ty z drugim pomysłem ale myślałem* że można krócej to zapisać

Jak chcesz krócej, to zapisz sobie w jednej linijce. A tak na serio to powinieneś chcieć, żeby zapytanie było jak najprostsze i działało jak najszybciej, a nie było jak najkrótsze.


Cytat(Damonsson @ 24.06.2013, 21:46:51 ) *
  1. WHERE name REGEXP 'rower|czerwonego'

  1. WHERE name REGEXP 'rower.+czerwonego'

Jeżdżenie po tabeli regexpem dla takich prostych porównań to IMO szaleństwo. W PHP też wszędzie upychasz preg_match jeśli możes zużyć prostego strpos?
Damonsson
Nie tylko w Twojej opinii. Powszechnie wiadomo, że LIKE jest szybsze w tym wypadku. Nie, nie używam, bo nie znam się na PHP, ani MySQL.
sowiq
Cytat(Damonsson @ 25.06.2013, 11:27:49 ) *
Powszechnie wiadomo, że LIKE jest szybsze w tym wypadku.

To po co proponujesz koledze rozwiązanie, o którym powszechnie wiadomo, że jest gorsze? smile.gif
Damonsson
Bo mu się tamto nie podobało, że za długie było. Zresztą nie wiedziałem tego jak to pisałem, dopiero jak Ty napisałeś, to się do-edukowałem.
Po za tym regexp dla polskich znaków rozróżnia wielkość liter i nie da się jakoś łatwo tego obejść. Więc na korzyść mojego rozwiązania przemawia tylko ilość literek w zapytaniu, ale skoro takie było kryterium autora smile.gif
Randallmaster
Dzięki za wyjaśnienie smile.gif
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.