Avatar billede sebster Nybegynder
24. september 2009 - 10:00 Der er 11 kommentarer og
1 løsning

Indexering af database hentning

Hej Eksperter,

Jeg sidder med en database med en masse poster i, når den loader kan maskinen slet ikke trække alle posterne og går kold. Derfor vil jeg gerne indexere så den kun henter 100 af gangen.

Nederst vil jeg gerne have at den laver en side som hedder Side:  1 2 3 4 5 6 7 8 9 Næste

Når man så klikker på næste eller side 2 skal der stå side: Forrige 1 2 3 4 5 6 7 8 9 Næste

Når man er nået til side 6 skal den begynde at fjerne start tallene så det ser således ud: Forrige 2 3 4 5 6 7 8 9 10 Næste.

Dvs at den hele tiden kun har 9 tal repræsenteret og når vi kommer over 5 så centeres den aktuelle side i midten af talrækken!

Google gør det og syntes det er super fedt. Nogen der har et bud?
Avatar billede silwing Nybegynder
24. september 2009 - 11:22 #1
Du nævner ikke hvilken database du bruger? MySQL har en LIMIT parameter, hvor du kan angive antal rækker og hvilken række der skal startes med. Den skal du i hvert fald have fat i :)

med COUNT(*) i MySQL eller php's funktion mysql_num_rows() kan du finde antallet af poster og deraf beregne antallet af sider totalt.

Det med at få udskrevet de rigtige sidetal og centrere i bunden skal jeg lige tænke lidt mere for at komme med en løsning til.
Avatar billede showsource Seniormester
24. september 2009 - 11:28 #2
Lyder også som om at du mangler at lave index på relevante kolonner i din db
Avatar billede sebster Nybegynder
24. september 2009 - 12:28 #3
Ja det er MySQL og det er LIMIT parameteret jeg gerne vil have i brug.

Det har jeg også fået nogenlunde til at fungere. Det er det i bunden jeg ikke kan få styr på!
Avatar billede dkfire Nybegynder
24. september 2009 - 12:58 #4
Det du leder efter hedder ikke indexering, men paging.
Der findes flere spørgsmål/ løsninger her på Eksperten.
Søg her eller på google.
Avatar billede sebster Nybegynder
24. september 2009 - 13:05 #5
Nå Paging hvad ved jeg :-)

Har du en ide til hvordan jeg løser den nedeste del?
Avatar billede dkfire Nybegynder
25. september 2009 - 23:06 #6
Det kræver lidt matematik, og en god cykel/løbetur, så har du løst det ;-)

Der er 3 ting du skal kende: max antal sider, sidens nummer og max antal sidenumre som må vises.
Et lille fiktiv forsøg

<?php

$MaxSider = 16;
$SideNr = 6;
$MaxAntalSider = 8;
$HalvMaxAntalSider = 4;

if( $MaxSider > MaxAntalSider ){
    if( ($SideNr - $HalvMaxAntalSider) >= 1 )
    {
        if( ($SideNr + $HalvMaxAntalSider ) > $MaxSider){
            $SlutSide = $MaxSider;
            $StartSide = $SlutSide - $MaxAntalSider;     
        }else{
            $StartSide = $SideNr - $HalvMaxAntalSider;
            $SlutSide = $StartSide + $MaxAntalSider;
        }
    }else{
        $StartSide = 1;
        $SlutSide = $MaxAntalSider + 1;
    }
}else{
    $StartSide = 1;
    $SlutSide = $MaxSider;
}

for( $i = $StartSide; $i <= $SlutSide; $i++)
{
  //Byg dine sidenumre her.
}



Jeg har ikke lige testet det, men tror det vil virke.
Avatar billede sebster Nybegynder
28. september 2009 - 14:38 #7
Det er  i hvert fald en god start! Smidder du et svar!
Avatar billede dkfire Nybegynder
28. september 2009 - 15:02 #8
Det gør jeg da gerne, men lad mig vide om det lykkes. Kunne jo være jeg selv fik brug for det en dag, eller andre fik brug for det ;-)
Avatar billede sebster Nybegynder
29. september 2009 - 09:37 #9
Det fungere indtil videre, men er lige gået i stå mht database udtrækket! Den skal hente limit 100, men hvordan starter den ved række 100?
Avatar billede dkfire Nybegynder
29. september 2009 - 11:16 #10
Vis mig din sql, så kan det være jeg kan hjælpe dig.
Avatar billede sebster Nybegynder
29. september 2009 - 11:46 #11
$regi=mysql_query("SELECT * FROM $regi LIMIT 100") or die ("Could not connect to the Database");
while ($list=mysql_fetch_array($regi)) {
echo $list['mid']."<br>";
}
Avatar billede dkfire Nybegynder
29. september 2009 - 14:36 #12
Du kan læse om LIMIT for en SELECT på :
http://dev.mysql.com/doc/refman/5.0/en/select.html

du kan bruge den som:
"SELECT kolonne FROM tabel LIMIT Startrække, Antal"
Husk dog på at rækkenumre i mysql er 0 offsat. dvs første række er nummer 0.
Så i dit tilfælde vil det kunne være:
"SELECT * FROM $regi LIMIT 99,100"
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester