Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: select count
Forum PHP.pl > Forum > Bazy danych
deniol13
  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
bismak
Spróbuj użyć mysql_num_rows
blooregard
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.
reaktor
Wroze z fusow, ze ten jedyny pasujacy rekord w Twojej tabeli
ma forum_id = 2 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 winksmiley.jpg
cojack
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?
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.