[SQL Server] Paging met PHP maken.*

Pagina: 1
Acties:
  • 194 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
In tegenstelling tot veel andere mensen maak ik geen gebruik van MYSQL, maar van Mircosoft SQL Server en deze keurt het niet goed wanneer ik LIMIT in mijn query gebruik,

Ik gebruik nu dit:
code:
1
2
3
4
5
6
7
$sql = "
SELECT * 
FROM tabel
WHERE user_id = ".$_SESSION['user_id']." 
ORDER BY datum DESC
LIMIT 5,5
";


Iemand een idee hoe dit met SQL wel kan. :?

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Nu online

gorgi_19

Kruimeltjes zijn weer op :9

TOP kan een oplossing zijn, geen idee wat je precies wilt.

[ Voor 91% gewijzigd door gorgi_19 op 05-03-2004 14:21 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Het dichtst bij komt TOP

code:
1
SELECT TOP 5 * FROM Tabel


Maar SQL Server heeft geen functie om op rij 5 te starten. Hier zul je zelf voor moeten zorgen. Hoe dit kan is op veel sites te vinden. Je kunt de zoekterm 'paging' eens gebruiken in combinatie met 'SQL Server'.

[ Voor 6% gewijzigd door P_de_B op 05-03-2004 14:22 ]

Oops! Google Chrome could not find www.rijks%20museum.nl


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
gorgi_19 schreef op 05 maart 2004 @ 14:20:
TOP kan een oplossing zijn, geen idee wat je precies wilt.
top zorgt er idd voor dat ik 5 resultaten krijg.

maar ik wil dus dat er bijvoorbeeld 10 resultaten worden getoond en indien het er meer zijn dat je dan de volgende 10 kunt opvragen.

Pagina: [1],[2],[3],[4] enz.

Acties:
  • 0 Henk 'm!

  • bartware
  • Registratie: Juni 2001
  • Laatst online: 25-03-2023

bartware

@jabber.org

Iemand een idee hoe dit met SQL wel kan.
Je doet het toch met SQL? ;)

Google al eens geprobeerd?

http://www.google.com/sea...start=0&ie=utf-8&oe=utf-8


BTW: SQL is een (de) standaard database taal. Als je een pakket bedoeld gebruik de naam dan: MS SQL Server.

Heb ik me begrepen?
Cycle Vision 2020: 17-20 juli Sportpark Sloten & Wheelerplanet Spaarnwoude


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Nu online

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 05 maart 2004 @ 14:22:
[...]


top zorgt er idd voor dat ik 5 resultaten krijg.

maar ik wil dus dat er bijvoorbeeld 10 resultaten worden getoond en indien het er meer zijn dat je dan de volgende 10 kunt opvragen.

Pagina: [1],[2],[3],[4] enz.
Dat is paging; er zijn een aantal artikelen verschenen over paging icm SQL Server; zie oa P_de_B z'n topic. Je hebt iig de zoekterm nu. :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • Chillz
  • Registratie: Augustus 2001
  • Laatst online: 08:57
P_de_B schreef op 05 maart 2004 @ 14:22:
Het dichtst bij komt TOP

Maar SQL Server heeft geen functie om op rij 5 te starten. Hier zul je zelf voor moeten zorgen. Hoe dit kan is op veel sites te vinden. Je kunt de zoekterm 'paging' eens gebruiken in combinatie met 'SQL Server'.
* Chillz heeft even een oud bestandje opgeduikeld

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-- manier om na de TOP 50 ook de volgende 50 te tonen

-- eerste 50:

    SELECT TOP 50 kolom
    FROM          tabel


-- 51 t/m 100:

    SELECT TOP 50 kolom
    FROM          tabel

    WHERE         kolom NOT IN
                 (SELECT TOP 50 kolom
                  FROM          tabel)


simpel, maar doeltreffend

zocht je zoiets?

[ Voor 7% gewijzigd door Chillz op 05-03-2004 14:30 ]

Leeg - Sinds 20180907


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ja, lijkt er al op.

kan ik even mee verder, bedankt.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb mijn code zoals ik deze nu heb iets korter hieronder gezet. Het werkt echter niet zoals het zou moeten.

Hij geeft namelijk wel goed 5 rijen weer en bij een druk op de knop weer 5 en vervolgens 2. (namelijk 12 rijen in db).

Alleen zijn de id's van de velden niet goed.

1ste serie: 1,2,3,4,5
2de serie: 1,2,3,6,7
3de serie: 1,2,10,11,12

Iemand een foutje gezien. :?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
session_start();
$weergave = '5';

if ($_POST['commited'] == 'yes')
{
   if ($_POST['vorige'] == true)
   {
   $_SESSION['quarantaine_rows'] = $_SESSION['quarantaine_rows'] - 5;
   $_SESSION['paging'] = '';
   unset ($_SESSION['paging']);
   }
   if ($_POST['volgende'] == true)
   {
   $_SESSION['quarantaine_rows'] = $_SESSION['quarantaine_rows'] + 5;
   $_SESSION['paging'] = '';
   unset ($_SESSION['paging']);
   }
}
else
{
   $_SESSION['quarantaine_rows'] = '5';
}

$sql = "SELECT id, datum_uitgeschreven, project, ordernummer, artikelnummer,
 materiaal FROM db_quarantaine ORDER BY datum_uitgeschreven DESC";
$sqlresult= odbc_exec($dbcnx, $sql);
$totaal = odbc_num_rows($sqlresult);

$paging = "SELECT TOP ".$weergave." id, datum_uitgeschreven, project, 
ordernummer, artikelnummer, materiaal FROM db_quarantaine WHERE id NOT IN 
(SELECT TOP ".$_SESSION['quarantaine_rows']." id FROM db_quarantaine ORDER
 BY datum_uitgeschreven ASC)";
$pagingresult= odbc_exec($dbcnx, $paging);

echo "<table>";
echo "<tr><td colspan ='5' align='left'>Het totaal aantal quarantaines 
is: ".$totaal."</td></tr>";

if (odbc_num_rows($pagingresult))
{
   While ($row = odbc_fetch_array($pagingresult))
   {
      echo "<tr>"; 
      echo "<td><a href='quarataine_view.php?id=".$row['id']."'>".stripslashes($row
      ['datum_uitgeschreven'])."</a></td>";
      echo "<td><a href='quarataine_view.php?id=".$row['id']."'>".stripslashes($row
      ['project'])."</a></td>";
      echo "<td><a href='quarataine_view.php?id=".$row['id']."'>".stripslashes($row
      ['ordernummer'])."</a></td>";
      echo "<td><a href='quarataine_view.php?id=".$row['id']."'>".stripslashes($row
      ['artikelnummer'])."</a></td>";
      echo "<td><a href='quarataine_view.php?id=".$row['id']."'>".stripslashes($row
      ['materiaal'])."</a></td>";
      echo "</tr>";
   }
}
echo "<tr><td colspan='5'>";
echo "<form method='POST' action='./limit.php'>";
echo "<input type='hidden' name='commited' value='yes'>";
echo "<input type='submit' value='Vorige pagina' name='vorige'>";
echo "&nbsp;";
echo "<input type='submit' value='Volgende pagina' name='volgende'>";
echo "</form>";
echo "</td></tr>";
echo "</table>";

[ Voor 24% gewijzigd door Verwijderd op 06-03-2004 14:18 ]


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:30
Ik stel voor dat je je code eens debugged. Voer eens je query uit in Query Analyzer, kijk welke resultaten je daar krijgt.
Ga na of het aan je query of aan iets anders ligt, etc.....

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ligt aan de query.

Krijg daar namelijk dezelfde uitkomst als bij de code.

Acties:
  • 0 Henk 'm!

  • Chillz
  • Registratie: Augustus 2001
  • Laatst online: 08:57
als ik zo door je script heen kijk zie ik:
code:
1
ORDER BY datum_uitgeschreven


had je niet op het ID-veld moeten Orderen?
(misschien dat het daardoor komt dat je rijen niet goed weergegeven worden?)

Leeg - Sinds 20180907


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
In dit geval sorteer ik inderdaad op datum_uitgeschreven, maar ik heb nog een aparte functie die hier later bij moet komen die kan sorteren op 5 andere velden.

De id's worden nu idd niet in volgorde weergegeven, maar blijven terugkomen en wanneer je sorteert kan een id natuurlijk niet 2 keer voorkomen in de gesorteerde gegevens.

ps. de query (met sort functie) werkt wel gewoon goed wanneer ik alle rijen laat weergeven op 1 pagina.
Pagina: 1