![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 728 Pomógł: 76 Dołączył: 12.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
Mam takie proste zapytanie, którym pobieram określoną ilość rekordów i wszystko byłoby ok gdy w tabeli pola id występują stale po sobie czyli np. 1,2,3,4,5 itd. Lekki problem jest gdy tabela ma taką strukturę id 1,2,3,11,12,13 wtedy skrypt dla wartości $min = 4 i $max = 5 wykona pusty przebieg.
Próbowałem to rozwiązać wczytując w pętli id do tablicy, tylko to jest nieefektywne, nieeleganckie i w ogóle be. Może jest jakaś inna metoda, może być też inne zapytanie byleby pobierało rekordy z jakiegoś przedziału.
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
A ja bym zapytał skąd Ty bierzesz $min i $max. Może sie bowiem okazać, że wyliczasz te dane niepotrzebnie, a istnieje zupełnie inne, prostsze podejście do rozwiązania. Nie wiem co konkretnie chcesz uzyskać, ale moim zdaniem niegłupi pomysł to zrobić zamiast jednego - dwa zapytania.
1) Uzyskaj z bazy liczbę rekordów spełniających zależność x >= $min AND x <= $max, z użyciem count() 2) jeśli uzyskany_wynik > 0 to zrób zapytanie SELECT (...) WHERE x >= $min ORDER BY x ASC LIMIT uzyskany_wynik Takie rozwiązanie, mimo iż pozornie wolniejsze może być szybkie i tylko na poziomie bazy jeśli zrobisz procedurę, do której jako paramtery prześlesz $min i $max. Count na indeksowanym polu będzie bardzo szybki i całość będzie kompletnie niewrażliwa na luki pomiędzy identyfikatorami. Jeszcze innym rozwiązaniem jest pobranie identyfikatorów rekordów spełniających warunek i tylko dla nich wykonać operację. Zwyczajnie opis szerzej problem, a może znajdzie się lepsze rozwiązanie problemu niż to co jest akurat w Twojej głowie i tak jak Ty byś tochciał rozwiązać. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 6.10.2025 - 18:33 |