Hellz Opublikowano 8 Listopada 2005 Udostępnij Opublikowano 8 Listopada 2005 Witam Piszę sobie CMS'a i mam taki dylemat. Gdy wyświetlam np. listę adminów, muszę ją ograniczyć, dajmy na to do 10 wyników na stronę. Są one pobierane z bazy MySQL. Przy pierwszym wywołaniu listy muszę wykonać pełne zapytanie, żeby zobaczyć ile zwróci wierszy. Gdy będzie to powiedzmy 54, a ja chcę wyświetlić tylko 10 rodzi się problem. Nie wiem, czy mam ograniczyć liczbę wyników przez: + wykonanie ponownego zapytania, tym razem z LIMIT 0,10 + nie wykonywać dodatkowego zapytania, zapisać wyniki w tablicy i użyć array_slice do wyświetlenia przykładowych 10 + stworzyć oddzielną tabelę i tam zapisywać sobie ilość wyników z każdej wielowierszowej tabeli, a następnie na jej podstawie wyciągać wyniki tylko LIMIT'em Jak sądzicie, który sposób będzie najbardziej "elegancki" i w miarę wydajny. Lepiej operować na dużych tablicach, czy zadać MySQL'owi dodatkowe pytanie. A może znacie lepszy sposób? Mam nadzieję, że da się zrozumieć mojego posta Pozdrawiam i czekam na sugestie Dała matka rozum? To kombinuj. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MMP Opublikowano 8 Listopada 2005 Udostępnij Opublikowano 8 Listopada 2005 Przy liście adminów jeśli w ACP to można wykonać dodatkowe zapytanie. Jeżeli wiesz że liczba rekrdów jest mała to tablica. Przy odzielnej tabeli będziesz musiał wykonywać jedno zapytanie więcej np. przy dodawaniu komentarzy. stopka usunieta z wpoodu wirusa na stronie docelowej Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Hellz Opublikowano 8 Listopada 2005 Autor Udostępnij Opublikowano 8 Listopada 2005 Ok, dzięki za odpowiedź. To był niestety tylko przykład, bo przecież w CMS'ie muszą się znaleźć np. listy artykułów i wtedy wczytywanie powiedzmy 2k rekordów może już nastręczać problemy. Więc może zapytam inaczej, jak byście to zrobili w wypadku dużej liczby rekordów? Dała matka rozum? To kombinuj. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
vel Opublikowano 8 Listopada 2005 Udostępnij Opublikowano 8 Listopada 2005 ja bym to zrobił tak robię zapytanie o liczbę wszystkich interesujących mnie rekordów. żeby potem przy przejściach między stronami nie powtarzać tego zapytania, zapisuję tą liczbę w zmiennej sesyjnej mając daną liczbę wszystkich rekordów oraz ilość rekordów na stronę obliczam ilość stron i z tego generuję sobie linki do przełączania między stronami. i potem właściwe zapytanie o rekordy z danej strony z klauzulą LIMIT $offset, $numberofrecords gdzie offset to pierwszy rekord jaki ma być wyświetlony w ten sposób masz jedno zapytanie przy każdym wywołaniu (przy pierwszym wywołaniu dwa, potem czytasz wartość z sesji) i z głowy w razie czego służę na pw krótkim przykładem kodu Kup sobie nieruchomości Kraków albo apartamenty Zakopane. Obejrzyj też fotoblog Grzegorza Ziemiańskiego Nowa Huta na deser Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pabel Opublikowano 8 Listopada 2005 Udostępnij Opublikowano 8 Listopada 2005 2k rekordów to nie jest duża baza - to maleństwo - nie powinno się zamulić o ile nie jest to zapytanie do tabeli połączonej z 10 innymi tabelami joinem. Ja wybrałbym rozwiązanie nr. 1 1. Select o liczbę rekordów - np po jedej kolumnie (nie z gwiazdką) 2. Select z LIMIT x, y Dodatkowo - jeśli zablokuje dane tabele na czas wykonania obydwu select-ów - dane nie zmienią się w międzyczasie) bo rozwiązanie 2. Jeśli się baza rozrośnie - to będziesz za każdym razem pobierał z bazy pełne dane i zapisywał w tablicy - a to sporo zeźre i czasu i mocy obliczeniowej. bo rozwiązanie 3. Musisz pilnować (to może być ważne albo i nie) synchronizacji - ktoś zapisał właśnie coś a ty masz w dodatkowej tabeli (tej od liczby wyników) stare dane. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pabel Opublikowano 8 Listopada 2005 Udostępnij Opublikowano 8 Listopada 2005 robię zapytanie o liczbę wszystkich interesujących mnie rekordów. żeby potem przy przejściach między stronami nie powtarzać tego zapytania, zapisuję tą liczbę w zmiennej sesyjnej 101073[/snapback] Być może liczba rekordów nie ma znaczenia i jest tylko informacyjna - ale jeśli na jej podstawie robisz jakieś obliczenia a w międzyczasie baza się zwiększyła (inna osoba coś dopisała) - to na czas sesji masz już przeterminowane dane. Ale zwykle na 90% - jeśli liczba rekordów jest tylko "mam w bazie 2445 produktów" - to spokojnie można użyć tej metody. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
nrm Opublikowano 8 Listopada 2005 Udostępnij Opublikowano 8 Listopada 2005 a ja tylko dodam, że w przypadku panelu admina stosuje zasadę: full funkcjonalności, full zapytań tzn. bez przesady ale w takim przypadku nie zastanawiam sie jak maxymalnie zredukowac liczbe zapytan. taki admin to sobie porobi coś raz na ruski rok i co mu bede pytań żałował Dla prawdziwych mastahów kodu! Webdeveloperzy wszystkich języków - łączmy się! "Robisz internety", jesteś PRO? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Hellz Opublikowano 8 Listopada 2005 Autor Udostępnij Opublikowano 8 Listopada 2005 Dzięki za wyczerpujące odpowiedzi Zabieram się do roboty Ps. Normanos, a ja jestem kawał dziada i nawet Adminowi żałuję Dała matka rozum? To kombinuj. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pabel Opublikowano 8 Listopada 2005 Udostępnij Opublikowano 8 Listopada 2005 a ja tylko dodam, że w przypadku panelu admina stosuje zasadę: full funkcjonalności, full zapytań tzn. bez przesady ale w takim przypadku nie zastanawiam sie jak maxymalnie zredukowac liczbe zapytan. taki admin to sobie porobi coś raz na ruski rok i co mu bede pytań żałował 101083[/snapback] Oj nie zawsze. Miałem przypadek że CMS-a (portalu) obsługiwało średnio 5 - 10 osób - fajna jazda była z samymi rangami userów i adminów, poziomami dostępu, priorytetami zapisu i odczytu do bazy itd. Więcej mulili niż już sam system dla użytkownika. Ale jeśli to ma obsługiwać 1 osoba - to też bardzo się nie przejmuję Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
mrtn Opublikowano 8 Listopada 2005 Udostępnij Opublikowano 8 Listopada 2005 Panowie albo ja jestem zielony albo dyskutujecie wtym wątku o czasie zapytania "SELECT count(*) FROM tabela" !? - który jest naprawde niewielki. ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MMP Opublikowano 8 Listopada 2005 Udostępnij Opublikowano 8 Listopada 2005 Ale nie przy skomplikowanych systemach gdzie liczymy każde zapytanie i funkcje Zresztą po co wywoływać tak kretyńskie zapytanie skoro mozna stworzyć kolumne np user_topics w forums i według tego tworzyć paginacje? stopka usunieta z wpoodu wirusa na stronie docelowej Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
fuzzy Opublikowano 8 Listopada 2005 Udostępnij Opublikowano 8 Listopada 2005 Lepiej jest IMHO od razu wykonywac zapytania z LIMITem i opcjonalnie ustawiac po ile wynikow chcesz wyswietlac na stronie. Mozna sobie spokojnie napisac funkcje, ktora generuje takie zapytania na podstawie 2 zmiennych: 1) il. wyników na stronie 2) numer strony do wyswietlenia wtedy jesli wyników jest mniej niż miesci sie na stronie, wyswietla sie wszystkie, jesli wiecej nalezy dodatkowy wyswietlic pasek zmiany strony NEOTERIC Mateusz Kurleto strony www sklepy internetowe webdesign Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Erbit Opublikowano 8 Listopada 2005 Udostępnij Opublikowano 8 Listopada 2005 Lepiej jest......jesli wiecej nalezy dodatkowy wyswietlic pasek zmiany strony Ale do tego potrzebna jest ilosc rekordow odpowiadajaca zapytaniu. Taka metoda jest w tym topiku juz opisana. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Hellz Opublikowano 8 Listopada 2005 Autor Udostępnij Opublikowano 8 Listopada 2005 "SELECT count(*) FROM tabela" Za długo dzisiaj siedziałem przy kompie, takie proste rozwiązanie i mi nie przyszło do głowy Wydaje mi się, że podstawiając zamiast * kolumnę klucza rozwiązanie będzie szybkie i skuteczne, o to chodziło Dała matka rozum? To kombinuj. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MMP Opublikowano 9 Listopada 2005 Udostępnij Opublikowano 9 Listopada 2005 Jeżeli wartość wiersza w danej kolumnie będzie nullem to będzie zła wartość tego zapytania Przynajmniej powinna być zła stopka usunieta z wpoodu wirusa na stronie docelowej Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Zarchiwizowany
Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.