Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z obliczeniem ilości danych znaków w ciągu
Forum PHP.pl > Forum > Przedszkole
mefistofeles
Nie mogę obliczyć ilość wystąpień danej o numerze 5 w tym stringu:

5+15+10+21

Mam to w tabeli w bazie i chciałem wybrać tylko te rekordy gdzie jest samo 5 i robiłem to tak:

  1. SELECT COUNT(*) FROM table WHERE category LIKE '%".$cat."+%' OR '%+".$cat."+%' OR '%+".$cat."%' OR category = ".$cat."


niestety w tym wypadku da mi to fałszywy wynik bo policzy też 5 w 15.

Można to jakoś obejść ?

Próbowałem jeszcze tak:

  1. SELECT * FROM `table` WHERE `category` REGEXP '^([0-9\\+]+\\+)?1([\\+[0-9\\+]+)?'


Często zwraca dobry wynik, ale jak szukam 1 to znajdzie mi też 12.

Jak to wyeliminować ?
Pilsener
Chcesz znaleźć samo "5" czy policzyć ile ich było w ciągu znaków? Daj po prostu, że ma szukać 5+ lub 5 i spację, albo 5 i każdy inny znak niż cyfra.
mefistofeles
Samo 5.

Jak daje że ma szukać samo 5+ to znajdzie też 15+ bo zawiera 5+ i tu jest problem.
tvister
Jeżeli + to jest separator to wystarczy lekka modyfikacja wyrażenia z like.
  1. SELECT '1+2+4+5' LIKE '5+%' OR '1+2+4+5' LIKE'%+5+%' OR '1+2+4+5' LIKE'%+5'
mefistofeles
Nie do końca rozumiem, skąd to: '1+2+4+5' questionmark.gif
tvister
W twoim przypadku to by wyglądało następująco:
  1. SELECT COUNT(*) FROM TABLE WHERE category LIKE '".$cat."+%' OR category LIKE '%+".$cat."+%' OR category LIKE
  2. '%+".$cat."' OR category = ".$cat."
mefistofeles
Tylko, że SELECT * FROM `filmiczki` WHERE category= ".$cat." , który jest ostatni częścią w/w zapytania zwaraca opróćz
kategorii o id załóżmy 16 także ciąg 16+ , jak zmodyfikować tego selecta żeby zwracał tylko $cat czyli 16 a 16+ już nie,
ponieważ ono jest już rozpoznawane wcześniej (LIKE '".$cat."+%') i się dubluje ?
tvister
Na duplikaty: count(distinct jakies_id).
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.