Avatar billede stieper Nybegynder
28. oktober 2005 - 16:11 Der er 13 kommentarer og
1 løsning

Limit 10 results i Mysql

Hejsa.

Jeg har nedenstående mysql query til at søge i min database.
Hvordan får jeg på nemmeste vis denne kode til at liste de 10 første resultater, og så vise links forneden til de næste 10 resultater osv...?

Er klar over at man skal bruge limit funktionen, men hvordan får man "næste 10", "forrige 10" links med?


soeg.php

<td align="left">
<table border="0" align="center" cellspacing="0" cellpadding="15">
<tr>
  <td>
  <div id="indhold">
      <h2>Søg efter malerier..</h2>
  </div>
  </td>
</tr>
<tr>
  <td>
  <?php
    require("./includes/mysql-funktioner.php");
    aabn_forbindelse_og_vaelgdb();
    $sql = "SELECT * FROM filer WHERE 1=1 ";
    //først tjekker jeg om type er tom - hvis det ikke er tilfældet startes med et AND argument.
    //Hvis en type er udfyldt, skal der startes med (, sådan at udtrykket kommer til at se sådan her ud: WHERE 1=1 AND (Type1='Olie' OR Type2='Pastel) AND PrisFra<500
    if(!empty($type1) or !empty($type2) or !empty($type3) or !empty($type4) or !empty($type5) ) {
    $sql .= "AND (";
      }
    if(!empty($type1) ) {
    $sql .= "`type` = '$type1' ";
      }
    if(!empty($type2) ) {
        if(!empty($type1) ) {
          $sql .= "OR `type` = '$type2' ";
          } else {
      $sql .= "`type` = '$type2' ";
            }
      }
    if(!empty($type3) ) {
          if(!empty($type1) or !empty($type2) ) {
            $sql .= "OR `type` = '$type3' ";
          } else {
              $sql .= "`type` = '$type3' ";
            }
      }

      if(!empty($type4) ) {
          if(!empty($type1) or !empty($type2) or !empty($type3) ) {
            $sql .= "OR `type` = '$type4' ";
          } else {
              $sql .= "`type` = '$type4' ";
            }
      }

      if(!empty($type5) ) {
          if(!empty($type1) or !empty($type2) or !empty($type3) or !empty($type4) ) {
            $sql .= "OR `type` = '$type5' ";
          } else {
              $sql .= "`type` = '$type5' ";
            }
      }


      if(!empty($type1) or !empty($type2) or !empty($type3) or !empty($type4) or !empty($type5) ) {
          $sql .= ") ";
      }


      if(!empty($prisfra) ) {



      $prisfra = intval($prisfra);
      $sql .= "AND `pris` >= '$prisfra' ";
      }
      if(!empty($pristil) ) {
      $pristil = intval($pristil);
      $sql .= "AND `pris` <= '$pristil' ";
      }
      if(!empty($bredde) ) {
      $bredde = intval($bredde);
      $sql .= "AND `width` <= '$bredde' ";
      }
      if(!empty($hojde) ) {
      $hojde = intval($hojde);
      $sql .= "AND `heigth` <= '$hojde' ";
      }
      $sql .= "ORDER BY `realname` ";
      $result = mysql_query($sql) or die(mysql_error());
      $number = mysql_num_rows($result);
      $debug = 0; //Sættes denne til 1 vises fejlretningsbeskederne i toppen af siden.
      if($debug == 1) {
      print "sql: $sql ";
      ?><br /><?
      print "type1: $type1 ";
      ?><br /><?
      print "type2: $type2 ";
      ?><br /><?
      print "type3: $type3 ";
      ?><br /><?
      print "type4: $type4 ";
      ?><br /><?
      print "type5: $type5 ";
      ?><br /><?
      }



      if($number == 1) {
      print  "Din søgning gav $number resultat";
      } else{
      print  "Din søgning gav $number resultater";
      }
      luk_forbindelse();
      ?>
      <br />
      <br />
  </td>
  </tr>
   
  <tr>
  <td>
    <table border=0 cellspacing=20>
      <tr class="presentation">
    <td align="left" width="200">Navn</td>
    <td align="left" width="550">Beskrivelse</td>
      <td align="left">Mål</td>
    <td align="left">Type</td>
      <td align="left">Pris</td>
      </tr>
  <? while ( $row = mysql_fetch_array($result) ) {?>
      <tr>
    <td width="200"><a class="mlink" href='vismaleri.php?id=<?=$row['id']?>'><?=$row['realname']?></a></td>
      <td class="presentation2" colspan="1" width="550"><small><?=$row['descr']?></small></td>
    <!--<img src='../upload".$image_dir."/tn_".$name."'>  Denne linje kan sættes ind i slutningen af ovenstående, for visning m billeder -->
      <td class="presentation2"><?=$row['heigth']?>x<?=$row['width']?></td>
      <td class="presentation2"><?=$row['type']?></td>
      <td class="presentation2"><?=$row['pris']?>&nbspkr.</td>
      </tr>
<? }?>
    </table>
    </td>
  </tr>
  </table>
</td>
Avatar billede udvikler Nybegynder
28. oktober 2005 - 16:16 #1
http://www.eksperten.dk/spm/650689

eller schaefner's kode:

$range = 5;

$offset = isset($_GET['offset']) ? $_GET['offset'] : 0;

$antal = mysql_result(mysql_query("SELECT COUNT(*) FROM forum"),0);
if ($offset >= $range) {
$forrige = $offset-$range;
echo "<a href='?offset=$forrige'>Forrige</a> | ";
} else {
echo 'Forrige | ';
}
if ($antal > $offset+$range) {
$naeste = $offset+$range;
echo "<a href='?offset=$naeste'>Næste</a>";
} else {
echo 'Næste ';
}


Der skal du så selvfølgelig lige ændre databasenavnet :)
Avatar billede stieper Nybegynder
28. oktober 2005 - 16:22 #2
Angående Schaefner's kode:

$_GET['offset'] <--- bliver denne automatisk sat i koden, eller skal jeg selv sætte den?
Og kan jeg ikke bruge min eksistende $number, som jo har værdien for antal matches i databasen?
Avatar billede udvikler Nybegynder
28. oktober 2005 - 16:29 #3
Jamen offset erklærer du jo i denne linie:
$offset = isset($_GET['offset']) ? $_GET['offset'] : 0;

og jo, det kan du da sagtens. Hvis du mener at du vil bruge $number i stedet for range (den variablen som bestemmer hvor mange resultater der skal være pr side) så bytter du bare range ud med $number:

$number = 5;

$offset = isset($_GET['offset']) ? $_GET['offset'] : 0;

$antal = mysql_result(mysql_query("SELECT COUNT(*) FROM forum"),0);
if ($offset >= $number) {
$forrige = $offset-$number;
echo "<a href='?offset=$forrige'>Forrige</a> | ";
} else {
echo 'Forrige | ';
}
if ($antal > $offset+$number) {
$naeste = $offset+$number;
echo "<a href='?offset=$naeste'>Næste</a>";
} else {
echo 'Næste ';
}
Avatar billede stieper Nybegynder
28. oktober 2005 - 16:31 #4
Nej det var ikke helt det jeg mente angåene $number.

$antal = mysql_result(mysql_query("SELECT COUNT(*) FROM forum"),0);

kan man ikke bruge min $number i stedet for denne query, eller skal man bruge endnu en query for at styre forrige og næste links?
Avatar billede udvikler Nybegynder
28. oktober 2005 - 16:40 #5
Hmm, det bedste ville nok bare være at lade scriptet stå som det gør, da det er schaefners :)

Men, hvis du nu absolut vil have det sådan som du ønsker med $number, så skal du lige skrive din $number kode her (det sted hvor du erklærer hvad den indenholder)
Avatar billede jaw Nybegynder
28. oktober 2005 - 16:42 #6
$offset og det $number jeg tror du tænker på er jo ikke det samme. $number vil indeholde det antal rækker i databasen, som overholder kriterierne. $offset er den række databasen skal starte med at hente, altså hvis den skal hente fra række 10 til 20, skal $offset være 10, mens $number hele tiden skal være f.eks. 43.
Avatar billede stieper Nybegynder
28. oktober 2005 - 16:43 #7
$number = mysql_num_rows($result);

den viser jo det antal resultater jeg får i min søgning. Men det ser ud til at scriptet skal "bygges" ind i min nuværende (lange) query? Ellers vil den jo liste alle resultaterne uanset hvad offset er sat til?
Avatar billede udvikler Nybegynder
28. oktober 2005 - 16:44 #8
Ja, det er også det jaw hentyder til :)
Avatar billede stieper Nybegynder
28. oktober 2005 - 16:46 #9
Pyha.. den er straks værre.. er ikke så hård til sql, og brugte en del tid på min query.. Men jeg må jo forsøge..
Avatar billede jaw Nybegynder
28. oktober 2005 - 16:46 #10
Jep, selve din query skal ligne:
SELECT * FROM tabel LIMIT $offset, $range
Avatar billede jaw Nybegynder
28. oktober 2005 - 16:47 #11
Ikke svært, du skal bare tilføje
$sql .= " LIMIT ".$offset.", ".$range;

Og så sørge for, at $offset og $range bliver sat _før_ din query, ellers går det godt og grundigt i vasken :)
Avatar billede stieper Nybegynder
28. oktober 2005 - 16:49 #12
Ja det kan jeg godt se. Men hvad er reglen - skal det ind FØR "order by" eller er det ok efter?
Avatar billede jaw Nybegynder
28. oktober 2005 - 16:50 #13
Det skal efter.
Avatar billede jaw Nybegynder
28. oktober 2005 - 16:51 #14
http://dev.mysql.com/doc/refman/5.0/en/select.html <- Hvis du vil se om reglerne :)
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

IT-JOB