Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Problem z obliczeniem ilości danych znaków w ciągu
mefistofeles
post
Post #1





Grupa: Zarejestrowani
Postów: 255
Pomógł: 0
Dołączył: 23.06.2009

Ostrzeżenie: (10%)
X----


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ć ?

Ten post edytował mefistofeles 5.02.2010, 09:00:48
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
Pilsener
post
Post #2





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


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





Grupa: Zarejestrowani
Postów: 255
Pomógł: 0
Dołączył: 23.06.2009

Ostrzeżenie: (10%)
X----


Samo 5.

Jak daje że ma szukać samo 5+ to znajdzie też 15+ bo zawiera 5+ i tu jest problem.
Go to the top of the page
+Quote Post
tvister
post
Post #4





Grupa: Zarejestrowani
Postów: 253
Pomógł: 29
Dołączył: 18.08.2008

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


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'


Ten post edytował tvister 5.02.2010, 10:39:07
Go to the top of the page
+Quote Post
mefistofeles
post
Post #5





Grupa: Zarejestrowani
Postów: 255
Pomógł: 0
Dołączył: 23.06.2009

Ostrzeżenie: (10%)
X----


Nie do końca rozumiem, skąd to: '1+2+4+5' (IMG:style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
tvister
post
Post #6





Grupa: Zarejestrowani
Postów: 253
Pomógł: 29
Dołączył: 18.08.2008

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


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





Grupa: Zarejestrowani
Postów: 255
Pomógł: 0
Dołączył: 23.06.2009

Ostrzeżenie: (10%)
X----


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 ?

Ten post edytował mefistofeles 5.02.2010, 11:23:39
Go to the top of the page
+Quote Post
tvister
post
Post #8





Grupa: Zarejestrowani
Postów: 253
Pomógł: 29
Dołączył: 18.08.2008

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


Na duplikaty: count(distinct jakies_id).
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 6.10.2025 - 16:07