Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> select count, zle liczy
deniol13
post
Post #1





Grupa: Zarejestrowani
Postów: 190
Pomógł: 2
Dołączył: 30.11.2009

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


  1. SELECT COUNT(STATUS) FROM `phpbb2_topics` WHERE STATUS = 0 AND forum_id = 2 OR forum_id = 6


i pokazuje że znalazło 6wyników mimo że jest tylko jeden gdzie status = 0 i forum_id = 2 lub 6
Go to the top of the page
+Quote Post
bismak
post
Post #2





Grupa: Zarejestrowani
Postów: 24
Pomógł: 1
Dołączył: 4.02.2010
Skąd: Jasło

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


Spróbuj użyć mysql_num_rows
Go to the top of the page
+Quote Post
blooregard
post
Post #3


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




Użyj tego zapytania w takiej postaci:
  1. SELECT * FROM `phpbb2_topics` WHERE STATUS = 0 AND forum_id = 2 OR forum_id = 6


i wtedy zobaczysz, dlaczego zwraca Ci 6, zamiast oczekiwanego jednego rekordu.
Go to the top of the page
+Quote Post
reaktor
post
Post #4





Grupa: Zarejestrowani
Postów: 18
Pomógł: 1
Dołączył: 2.01.2010

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


Wroze z fusow, ze ten jedyny pasujacy rekord w Twojej tabeli
ma forum_id = 2 (IMG:style_emoticons/default/smile.gif)

Nie dales nawiasow w swoim warunku, a AND ma wyzszy priorytet
niz OR. Czyli wybierasz rekordy ktore maja status=0 i forum_id=2
ORAZ rekordy ktore maja forum_id=6 i status jakikolwiek.

Sieknalem sie niedawno w ten sposob i wywalalo na strone piecdziesiat
tysiecy rekordow, a mialo byc ze dwiescie (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
cojack
post
Post #5





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

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


Tu nie chodzi o to że AND ma wyższy priorytet. Jest błąd logiczny w zapytaniu na który zwróciłeś uwagę, chodź nie do końca o to chodziło. Zapytanie jest traktowane liniowo, od lewej do prawej. Jak widzi WHERE to ma warunek, ma być spełniony, jeżeli widzi AND, czyli koniunkcję to oba te warunki muszą być spełnione. Warunek WHERE jest nie prawdziwy gdy chodź jedno z nich jest nie prawdziwe. Następnie trafia na klauzulę OR, alternatywa dla warunku wcześniej, czyli interpretator języka SQL widzi to zapytanie w postaci warunku OR gdzie pierwszy element jest dwuczłonową koniunkcją.

Proste nie?

Ten post edytował cojack 26.04.2010, 08:45:02
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: 23.08.2025 - 06:46