Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> SELECT BETWEEN jak nie wykonywać pustego przebiegu gdy id nie istnieje
amii
post
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.

  1. $zapytanie = "SELECT * FROM tabela WHERE id BETWEEN $min AND $max";
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
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.
Go to the top of the page
+Quote Post

Posty w temacie
- amii   SELECT BETWEEN jak nie wykonywać pustego przebiegu gdy id nie istnieje   18.01.2011, 12:36:22
- - nospor   [PHP] pobierz, plaintext $zapytanie = "SELECT...   18.01.2011, 12:40:12
- - wookieb   Czyli pole ID jest tekstem a nie numerem (czyli ta...   18.01.2011, 12:41:07
- - nospor   Cytatpamiętaj, żę beetween jest tu lepszeta, szcze...   18.01.2011, 12:42:57
- - wookieb   Czytam I biorę poprawkę na to, że autor tematu ch...   18.01.2011, 12:47:40
- - nospor   ALeż rozumie. I właśnie dlatego zadał pytanie na f...   18.01.2011, 13:02:28
- - amii   Tego chyba się jednak nie da rozwiązać tak jak teg...   18.01.2011, 13:44:55
- - nospor   CytatAle LIMIT tu nic nie zmienia bo program odczy...   18.01.2011, 17:14:14
- - thek   A ja bym zapytał skąd Ty bierzesz $min i ...   18.01.2011, 22:03:42
- - amii   Cytat(nospor @ 18.01.2011, 17:14:14 )...   19.01.2011, 09:25:34
- - thek   Po pierwsze to optymalizuj sobie. Skoro z bazy pob...   19.01.2011, 10:34:54
- - amii   sorki tam zostały stare komentarze chciałem edytow...   19.01.2011, 11:15:19
- - thek   Jeśli więc dobrze rozumiem (nie mam pewności, więc...   19.01.2011, 12:24:55
- - Pilsener   Skoro problem dotyczyCytati wszystko byłoby ok gdy...   19.01.2011, 12:44:06
- - amii   thek tak skrypt powinien działać w ten sposób jaki...   20.01.2011, 12:39:58
- - thek   Ale jak się uruchamia dla nie istniejących rekordó...   20.01.2011, 13:19:54
- - Pilsener   Możesz ponumerować rekordy jednym zapytaniem używa...   21.01.2011, 13:34:06


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: 4.10.2025 - 01:40