Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Pagingsystem?

Postades av 2002-12-02 15:03:47 - PerRagnar Edin, i forum asp - allmänt, Tråden har 7 Kommentarer och lästs av 482 personer

Finns det något vettigt pagingsystem att använda sig av till forum, gästböcker osv?
De flesta script jag har sett hämtar alla posterna till ett resultset och skriver bara ut de poster som ska synas på den aktuella sidan men det känns som om det kommer att bli långsamt efter ett tag.

I MySql kan jag fråga databasen efter x poster i "mitten" av sorteringen, t ex posterna 25 - 30 sorterat efter datum. Finns det inget liknande i MSSql eller Access?


Svara

Sv: Pagingsystem?

Postades av 2002-12-02 15:57:25 - Hobil Haidari

Jag föreslår att du testar funktionen GetRows, den är klockren.
Hämtningstiden är minimal och du jobbar med vektorer, går klockrent, snabbt och smidigt.

Kolla om det inte redan finns en artikel om getRows, annars har jag ltie tips, vet bla att 4guysfromrolla.com har en suvve artikel om det.

Inte riktigt vad du var ute efter, det finns ett annat alternativ, kör man SQL Server har 4guysfromrolla.com även ett exempel med en Store Procedure som gör exakt det du efterfrågar. Du anger vilken sida du vill hämta och den returnerar ett recordset med posterna för just den sidan, du anger oxo hur många poster det ska vara på varje sida...


Svara

Sv: Pagingsystem?

Postades av 2002-12-02 16:03:52 - Per Hultqvist

Hur löser MySQL detta? Kan du ge exempel på hur en SQL-sats ser ut där detta görs. Då ska jag gärna verifiera om samma SQL-sats fungerar i MS-SQL.

Detta går ju att lösa på olika sätt, enklast är ju om man har en Identitykolumn som ökar med 1 och i vilken man inte tillåter delete:s. Då är det ju bara att skriva :

SELECT TOP 25 * FROM tabell WHERE ID>=100

för att få raderna 100-124. Men en lösning som fungerar på alla tänkbara tabeller, med olika typer av index och sorteringar blir nog ganska komplex och kanske kräver temp-tabeller och/eller cursors för att selektera ut datan. Den blir nog rätt slö i många fall, men prestanda är ju relativt...

Hur som helst, vore kul att se MySQL:s syntax för detta...

/Per Hultqvist


Svara

Sv: Pagingsystem?

Postades av 2002-12-02 16:18:37 - Christoffer Hedgate

MySQL använder ett nyckelord som heter LIMIT, vilket inte finns i SQL Server (eller ANSI SQL) och alltså inte fungerar där. Hur det egentligen fungerar i MySQL är iofs lite intressant..

I SQL Server kan man absolut göra som du föreslog, med rätt index så är det inga problem. Naturligtvis kan det bli problem med andra operationer, eller så kan andra operationer göra att det inte går att lösa på detta sätt, men om man bara vill lösa just detta problem är det bara att lägga ett index på den kolumn man vill 'bläddra' i. Naturligtvis är det absolut bäst om du har en obruten sekvens av heltal att göra TOP mot, precis som Hultan föreslog. Har man inte det kan man antingen skapa sig det genom att selecta in raderna i en temptabell (med en identity-kolumn i denna nya temptabell) vilket ger en obruten sekvens man sedan kan köra TOP mot, eller göra som jag skrivit i ett tips på min site:

http://hedgate.editthispage.com/2001/04/30

/C


Svara

Sv: Pagingsystem?

Postades av 2002-12-02 16:50:49 - Per Hultqvist

Tack för info:n om LIMIT, jag misstänkte att MySQL hade någon specialare här för jag har aldrig hört talas om detta förut (och jag håller nästan uteslutande på med MS-SQL).

Jag funderade lite på det exemplet som du länkade till. Den inre SQL-satsen kommer ju att returnera fler och fler rader ju längre fram man stegar och det borde leda till en hel del NOT-IN-jämförelser om det handlar om tusentals rader. Å andra sidan så lär väl inte en temp-tabell heller vara så snabb. Vet du något om vad som händer med den SQL-satsen när antalet rader är mycket stort? Kommer den alltid att vara snabbare än en temptabell-lösning? Det känns spontant som att en subfråga som väljer ut indexen (om än mot en temptabell) som ska hämtas måste vara grymt mycket snabbare än en subfråga som väljer ut indexen som INTE ska hämtas om antalet rader är stort och urvalet är litet. Tankar kring detta?

/Per Hultqvist


Svara

Sv: Pagingsystem?

Postades av 2002-12-03 09:46:52 - Patrik Berggren

NOT-IN lösningen blir seg som sirap i längden.

GetRows() presterar bättre än traditionell paging (adodb.recordset) upp till ett par tusen poster. Därefter presterar adodb.recordset (traditionell paging) likvärdigt eller bättre.

LIMIT funktionen i mySQL blir oxå seg när man närmar sig slutet av posterna.

Faktum är att man inte "bör" se till att mer än kanske 500 poster returneras som max. Har man flera hundra tusen poster så ska en bra sökfunktion finnas för att kunna gallra ut vilka poster man vill returnera.

just my $0.02

PatrikB


Svara

Sv: Pagingsystem?

Postades av 2002-12-03 10:03:21 - Christoffer Hedgate

Håller med i det mesta, framförallt att man inte bör bläddra hur långt som helst. Kan tänka mig att LIMIT-funktionen blir seg, eftersom den förmodligen fungerar på något liknande sätt. Jag tycker aldrig att man ska använda varken recordset-paging eller getrows eftersom jag inte vill skicka extra data från servern till klienten eller använda server-side cursors. Naturligtvis finns det undantag, ex. enanvändarapplikationer som kör mot en lokal databas, men det är normalt sett inte det som diskuteras här (framförallt inte i ASP - Allmänt forum). Visst blir NOT IN-lösningen seg efter ett tag, men man bör som sagt inte bläddra för långt. En bättre lösning visat jag i ett separat svar på Hultans inlägg. Jag tycker i vilket fall som helst att man så långt som möjligt ska lösa det i databasen (eller möjligen ett system specifikt för det, dvs ett söksystem).


Svara

Sv: Pagingsystem?

Postades av 2002-12-03 10:07:51 - Christoffer Hedgate

Du har rätt i att man kan skriva om NOT IN till en bättre lösning, se nedan. Dock vill jag påpeka att man ska alltid testa olika varianter, bara för att en lösning fungerar bra i ett exempel eller specifikt fall så behöver det inte innebära att den gör det i ett annat fall. I vissa fall är t ex en temptabell kanske bättre. Här är iaf en bättre SELECT-sats än den som gör NOT IN. Tack för påpekandet.

SELECT * FROM (
SELECT TOP 20 OrderId, OrderNumber, OrderDate
FROM (
SELECT TOP 620 OrderId, OrderNumber, OrderDate
FROM foo
ORDER BY OrderDate DESC
) a
ORDER BY OrderDate ASC
) b
ORDER BY OrderDate DESC


Svara

Nyligen

  • 08:28 Butiksskyltar: Hur upplever utbude
  • 22:31 Slappna av
  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 812
27 960
271 761
444
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies