![]() |
![]() |
![]()
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 ![]() |
Ale jak się uruchamia dla nie istniejących rekordów? Widzisz by to robił? Pobieram za każdym razem tylko istniejące. LIMIT mi pobiera tylko kolejne po sobie rekordy... Skoro nakazuję mu pobrać 3, to nie robi mi luki w cyklu 1 gdzie mam 4,6,7 do postaci 4,6 co postulujesz jakoby robił. LIMIT pobiera kolejne pasujące do wzorca i NIE wstawia nie istniejących, w tym wypadku nie robi pustego przebiegu dla 5, ale pobiera brakujący mu dla 3 rekordów następny element, a więc o id =7... Chciałeś w zapytaniu kolejne 3 rekordy? Dostałeś 3, a nie 2. Chyba kompletnie nie rozumiesz jak działa LIMIT w MySQL. On nie robi sobie LIMIT X, Y jako pobierz od rekordu o id = X do rekordu o id = Y. LIMIT działa na zasadzie: pobierz od rekordu mającego indeks X spośród wybranych zapytaniem wyników kolejne Y rekordów. A to cholernie duża różnica.
Popatrz na wywołania. Czy dla cyklu 0 zaczyna mi od rekordu o id 0 czy od 1? a przecież mam LIMIT 0, 3 i patrz dalej... Dlaczego mi się "cudem" kompletnie liczby w LIMIT nie pokrywają z uzyskiwanymi jako wyniki? LIMIT 6, 3 daje rekordy 9,12,15, więc jak to wyjaśnisz? Jakoś nie daje od rekordu o id = 6 do 6+3, czyli id = 9 (IMG:style_emoticons/default/smile.gif) Samo zapytanie daje dobre rezultaty. Widocznie gdzieś inna część skryptu ma walniętą pętlę for($i = $min; $i < $min+$pula; $i++) i to ona Ci brudzi, a nie zapytanie. Lepiej posprawdzaj dokładnie, bo jak na razie to Twój opis działania LIMIT jest dla mnie herezją (IMG:style_emoticons/default/winksmiley.jpg) Gdy już ją znajdziesz zamień ją na foreach lub while i dopiero wtedy sprawdź czy wszystko jest cacy. Bo jak dla mnie tak masz najpewniej zrobione i szukasz byka w logice nie tam gdzie on faktycznie jest. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 4.10.2025 - 01:40 |