i wtedy zobaczysz, dlaczego zwraca Ci 6, zamiast oczekiwanego jednego rekordu.
reaktor
14.04.2010, 00:40:01
Wroze z fusow, ze ten jedyny pasujacy rekord w Twojej tabeli ma forum_id = 2
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
cojack
26.04.2010, 08:44:01
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.