![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 9.02.2004 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
Jest mały opis inne rozwiązania w dziale php dla Początkujących:
http://forum.php.pl/index.php?showtopic=24139 Problem: Wyszukanie poprzedniego i następnego elementu w liście wyników. Tak aby móc pokazać linki: POPRZEDNI ... NASTPNY na stronie WWW. Problem nie jest trywialny bo wielokrotnie sam PRIMARY KEY nie określa kolejności - mamy często dodatkowe warunki WHERE oraz kolejność np. alfabetyczną.
Podstawowe zapytanie o porcje danych wygląda tak: (pobieram wybraną grupę; nazwiska alfabetycznie; 10 rekordów na stronę; od 20-stego)
Możemy się domyśleć, że id będzie ułożone całkowicie dowolnie... bez regularności. Wybieram teraz pewien rekord klikająć na stronie WWW np. na nazwisku (wybieram np. id='108') Na stronie tego autora chce zobaczyć linki POPRZEDNI, NASTPNY w obrębie tej grupy ('1') oraz wg alfabetu. Jak znaleźć rekord poprzedni i następny? Rozwiązanie podejrzane w kodzie phpMyAdmina polega na pamiętaniu od jakiego wiersza wypisane są wyniki (w przykładzie powyżej: od 20-stego), obliczeniu jaki numer wiersza przypada na wybranego autora (czyli dla id='108': np. 23) i zastosowaniu potem coś takiego: skrypt.php?autor=22 - poprzedni skrypt.php?autor=24 - następny W skrypcie natomiast stworzeniu zapytania:
$autor nie może być mniejszy od jeden oraz większy od ilości rekordów ($autor<1) || ($autor>$maxRecords)
(tutaj mogę pominąć 'ORDER BY' bo nie jest to konieczne) Jak oceniacie takie rozwiązanie? Jakieś sugestie? Może ktoś to już rozpracował? Ten post edytował pauluZ 7.02.2005, 18:07:35 -------------------- pauluZ
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 255 Pomógł: 0 Dołączył: 22.04.2004 Skąd: Żoliborz Ostrzeżenie: (0%) ![]() ![]() |
Polecenie Limit nie określa od którego id do którego id chcesz mieć wyniki, tylko które chcesz mieć wiersze. I nie ważne jakie masz warunki czy sortowanie.
-------------------- Visual Basic - kto by pomyślał :)
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 9.02.2004 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
Cytat(popbart @ 2005-02-07 17:52:55) Polecenie Limit nie określa od którego id do którego id chcesz mieć wyniki, tylko które chcesz mieć wiersze. I nie ważne jakie masz warunki czy sortowanie. Dokładnie! Dlatego bez względu na warunki i sortowanie jeśli pobiorę wiersze poprzedni i następny względem aktualnego to otrzymam to co potrzebuję. Na razie nie widzę innych rozwiązań do wyciągnięcia tych rekordów (prev,next) oprócz powyższego. Aha. Wyjaśnienie. Robię tak bo nie chcę pobierać wszystkich rekordów np. tak:
i potem szukać w php rekordu o id='108' (to z przykładu) i zapamiętać id poprzednie i następne z tej listy. Chcę aby baza zajęła się wyborem tych właściwych wierszy (prev,next). -------------------- pauluZ
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 09:48 |