![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Veteran
Registriert seit: 15.08.2001
Alter: 50
Beiträge: 235
|
![]() huhu!
ich hab folgendes problem: ich bastle grade zum spass an einem forum rum und da habe ich mir gedacht, ich probier mal aus, wie das mit dem ms-sql-server so funzt, um mal was neues zu lernen. und schon stosse ich auf ein problem. ich lese aus einer tabelle (welche alle posts zu einem forums-thread beinhaltet) diese posts sortiert nach erzeugungsdatum aus. jetzt möchte ich paging bedingt immer nur die ersten 20, die zweiten 20, usw. haben. muss aber nicht immer 20 sein, sondern das sollte man variabel einstellen können. doch da mit limit nix is in mssql und man die anzahl der zeilen, die mit TOP zurückgeliefert werden, nicht dynamisch halten kann (z.b. über einen stored-procedures-parameter), stehe ich hier ein bisschen an. eine temp-table dafür zu erzeugen erscheint mir ein wenig heftig und auch meine google-recherche brachte mich nicht so richtig weiter. kennt jemand von euch eine gute möglichkeit des pagings direkt im ms-sql-server, bei der der umfang der zeilen pro page und die page selbst dynamisch gehalten werden kann (z.b. 20 posts der 3. page = post 41-60)? danke im voraus! |
![]() |
![]() |
![]() |
#2 |
Inventar
![]() Registriert seit: 04.11.2001
Alter: 45
Beiträge: 2.150
|
![]()
____________________________________
LOL - Mein erstes Post im Programmier Forum MACINTOSH - Most Applications Crash, If Not The Operating System Hangs |
![]() |
![]() |
![]() |
#3 |
Veteran
Registriert seit: 15.08.2001
Alter: 50
Beiträge: 235
|
![]() vielen dank käptn für deine antwort!
die idee mit der temporären tabelle is mir selbst auch schon gekommen, jedoch hoffte ich auf eine andere lösung, die vielleicht etwas eleganter zu implementieren ist. ![]() |
![]() |
![]() |
![]() |
#4 |
Inventar
![]() Registriert seit: 04.11.2001
Alter: 45
Beiträge: 2.150
|
![]() Aso, sorry...
~
____________________________________
LOL - Mein erstes Post im Programmier Forum MACINTOSH - Most Applications Crash, If Not The Operating System Hangs |
![]() |
![]() |
![]() |
#5 |
Hero
![]() Registriert seit: 04.09.2001
Beiträge: 894
|
![]() hi !
ich hab sowas auch programmiert und verwende zum db zugriff adodb. da machts keinen unterschied, ob man sql-server oder mysql verwendet - genauer gesagt: man müsste sich beim source von adodb anschauen, wie die das gemacht haben, dass man die datensätze seitenweise bekommt. heißt irgendwas mit "adodb_pager" - findest sicher selbst. (habs momentan nicht da zum nachschaun) ...theoretisch könnt ma ja auch alle datensätze der abfrage in ein array einlesen dann sollts auch einfach sein, nur bestimmte davon auszugeben - außerdem muss man dann nur 1 mal auf die db zugreifen. obs gscheit ist, weiß ich nicht - hab erst begonnen, mich mit php zu beschäftigen. fg -hannes |
![]() |
![]() |
![]() |
#6 |
Inventar
![]() Registriert seit: 04.11.2001
Alter: 45
Beiträge: 2.150
|
![]() Hm,... hab nirgends PHP gelesen, ich dachte eher es geht um ASP...
Den ganzen Table auszulesen halte ich für weit übertrieben, was machst du mit z.B. 10 MB wenn du nur 100k (und das ist schon einiges auf einer Seite) anzeigen willst, oder der User nach einer Seite gefunden hätte was er sucht... ~
____________________________________
LOL - Mein erstes Post im Programmier Forum MACINTOSH - Most Applications Crash, If Not The Operating System Hangs |
![]() |
![]() |
![]() |
#7 |
Hero
![]() Registriert seit: 04.09.2001
Beiträge: 894
|
![]() @käptn:
stimmt natürlich - hab das wohl falsch ausgedrückt bzw. dabei zu sehr am "mein projekt" gedacht. bei diesem weiß ich, dass es pro person ca. 100 dieser zugeordnete datensätzt gibt und ich im pager jeweis 5 anzeige - in diesem konkreten fall find ichs gscheit, diese alle gleich ins memory zu lesen, damit nicht beim blättern jedesmal ein db-zugriff erfolgen muss. im aktuellen wcm ist sogar ein artikel drin über "zeitkosten" eines db-zugriffes. ![]() @Gonte: verwendest asp oder php ? fg biri |
![]() |
![]() |
![]() |
#8 |
Veteran
Registriert seit: 15.08.2001
Alter: 50
Beiträge: 235
|
![]() das ganze wird mit asp.net auf c#-basis realisiert.
ich habe jetzt einige verschiedene möglichkeiten durchgetestet, wobei ich mich dann doch für jene mit der temp-table entschieden habe, weil sie interessanterweise die performanteste ist. etwas eleganter wäre folgender workaround gewesen: select * from ( select top @postsperpage * from ( select top @postsperpage*@page * from posts order by generatedate asc ) order by generatedate desc ) order by generatedate asc; doch leider lässt sich ja top in einer stored procedure mit einem parameter nicht "dynamisieren". und das paging in c# selbst durchzuführen erscheint mir doch etwas gewagt. ![]() vielen dank euch 2! |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|