SanjiMedlem sedan juli 2009355 inlägg Hej! jag håller på med en sql-sats för hämtning av 60 rader i taget, från en mssql-databas. anledningen till att jag vill få ut 60 rader är för att jag vill visa resultatet uppdelat på flera sidor.
min sql-sats ser för närvarande ut så här:
SELECT offerdata.ID FROM
( SELECT offerdata.ID, offerdata.number, offerdata.companyID,
offerdata.deliverynotedate, offerdata.orderreference, offerdata.customerID,
offerdata.projectID, offerarticles.articleID, offerarticles.articletext,
ROW_NUMBER() OVER (ORDER BY offerdata.number DESC) AS row
FROM offerdata LEFT OUTER JOIN offerarticles ON
(offerdata.ID = offerarticles.offerID)
WHERE offerdata.companyID = 'f452b84e-2484-4e71-8ff3-c9d8069f6874')
offerdata LEFT OUTER JOIN offerarticles ON (offerdata.ID = offerarticles.offerID)
WHERE offerdata.companyID = 'f452b84e-2484-4e71-8ff3-c9d8069f6874'
AND row > 0 AND row <= 60 ORDER BY offerdata.number DESC
jag hade en fungerande sql förut, men den fungerade tyvärr inte ihop med mina sorteringsfunktioner, så var tvungen att göra en ny. nu har jag problemet att när jag testar min sql i sql server manager så får jag upp många fler resultat än 60, och många resultat verkar dessutom vara exakt samma rader. någon som kan se något uppenbart fel jag gör?
Mvh Marucs
Kolla på SQL-Server TOP istället, aningen enklare än att hålla på sådär...
http://msdn.microsoft.com/en-us/library/ms189463.aspx
SanjiMedlem sedan juli 2009355 inlägg har nu byggt om min sql med TOP-funktionen, nu har jag dock problem med att få min sökning att fungera bra ihop med sid-funktionen. resultaten hämtas och visas som de ska om jag endast hoppar från sida till sida, men så fort jag lägger på sorteringar osv. så kommer poster från föregående sida med även på följande sida. jag gissar på att när man har med en sökning och går från t.ex. sida 1 till 2, och den inte får ihop nog med poster för att fylla hela sidan, så tar den poster som stämmer in på sökningen och visar dessa på sida 2, även om dessa poster varit med på sida 1.
här har vi ett exempel på en sökning i kombination med sidval:
"select top 60 offerdata.ID from offerdata
where offerdata.companyID = 'f452b84e-2484-4e71-8ff3-c9d8069f6874'
AND offerdata.orderreference IS NOT NULL
AND offerdata.ID not in
(select top 60 offerdata.ID from offerdata LEFT OUTER JOIN offerarticles
ON (offerdata.ID = offerarticles.offerID)
WHERE offerdata.companyID = 'f452b84e-2484-4e71-8ff3-c9d8069f6874'
AND offerdata.orderreference IS NOT NULL
ORDER BY offerdata.orderreference DESC)
ORDER BY offerdata.orderreference DESC"
någon som har ett tips på hur jag undviker att få med samma poster på olika sidor?
Mvh Marcus
SanjiMedlem sedan juli 2009355 inlägg har testat med ännu en sql, denna borde hämta ut 60 poster, men jag får ut 32st.
Select bar.ID, bar.number, bar.orderreference, bar.deliverynotedate
FROM(SELECT TOP 60 foo.ID, foo.number, foo.orderreference, foo.deliverynotedate
FROM(SELECT TOP 120 offerdata.ID, offerdata.number, offerdata.orderreference, offerdata.deliverynotedate
FROM offerdata LEFT OUTER JOIN offerarticles ON (offerdata.ID = offerarticles.offerID)
WHERE offerdata.companyID = 'f452b84e-2484-4e71-8ff3-c9d8069f6874' ORDER BY offerdata.number DESC ) as foo
ORDER BY foo.number ASC) as bar
ORDER BY bar.number DESC
kan inte komma på vad det är jag gör för fel :(
Denna sql ska hämta ut resultat för sida 2, sql:en som blir för sida 1 hämtar ut 45 poster.
hittade detta exempel på http://www.codeproject.com/Articles/17847/Paging-records-in-SQL-Server-2005-SQL-Server-2000
SanjiMedlem sedan juli 2009355 inlägg har nu kommit på vad felet jag hade var! anledningen till att jag inte fick ut 60 rader på varje sida var att den inre joinen inte alltid hittade en rad i artikeltabellen att länka med, och då försvann de offerterna som inte joinen fungerade med. har nu gjort så att endast om man söker efter någon information om artiklar som hör till en offert, så tas joinen med, för då vill man ändå bara visa offerter som har artiklar som uppfyller sökkriterierna.
tack Gildebrand för tipset om sql TOP, har äntligen fått detta att fungera bra :)