webForumDet fria alternativet

Hämta TOP 25 och även ta det högsta....

Databaser & SQL

6 svar · 321 visningar · startad av Daniel78

Medlem sedan jan. 2001200 inlägg
Frågan#1

Hej, om någon vill ha något att klura på så varsågoda. Jag har spenderat två Cola burkar nu på detta och behöver förmodligen lite hjälp.

Jag vill plocka de 25 senaste posterna, vilket fungerar fint! Chefen har nu lagt till ytterligare en kolumn till ID nummer, vilket är ett så kallat löpnummer. Om man ändrar en post så läggs det till en ny post med samma ID nummer men Löpnummret ökar med ett, typ såhär:

Post_ID____Post_ID_Lopnr

2056----------------0
2057----------------0
2056----------------1 (Förändrad post 2056)
2058----------------0

När jag ska plocka rader så vill jag alltså ha ut dessa rader:

Post_ID____Post_ID_Lopnr

2057----------------0
2056----------------1
2058----------------0

Mitt senaste förslag på SQL:

MySQL ="SELECT TOP 25 * FROM tblPostLista WHERE Post_ID_LopNr IN (SELECT TOP 1 Post_ID_LopNr FROM tblPostLista ORDER BY Post_ID_LopNr DESC) ORDER By Post_Datum DESC"

Ger mig bara en post, visserligen rätt, men den ska/bör ge mig 25st!

:birp

Medlem sedan jan. 20032 285 inlägg
#2

Har ingen aning om det här funkar, men du kan ju testa. :)

SELECT TOP 25 *,
(SELECT TOP 1 Post_ID_LopNr FROM tblPostLista ORDER BY Post_ID_LopNr DESC) AS Lop
FROM tblPostLista
ORDER BY Post_Datum DESC

/red Läste din fråga igen, och kom fram till att jag inte riktigt fattar vad du menar. ;)

Medlem sedan juni 200032 967 inlägg
#3

Inte precis så, men det går ju alltid att lösa med en UNION.

Mvh,

Medlem sedan jan. 2001200 inlägg
#4

Funkar UNION på kolumner, måste det inte vara två tabeller för att köra en UNION? :q

Medlem sedan juni 200032 967 inlägg
#5

Nej, men om man, som jag, inte läser originalinlägget ordentligt så går det åt pipsvängen! :e

Jag ber om ursäkt och återkommer om jag får någon kanonläcker idé.

Mvh,

Medlem sedan jan. 2001200 inlägg
#6

Okej, så här är läget nu. Med denna SQL sats:

MySQL = "SELECT TOP 25 * FROM tblPostLista ORDER BY Post_DatumEgen Desc,Post_ID,Post_ID_LopNr DESC"

Får jag fram alla poster inklusive dubletter, dock sorterade rätt.

Så jag gjorde en programsnutt(ASP:VBScript) som ser till att om den redan har skrivit ut ett ID(vilket är sorterat efter löpnummer) så ska den hoppa över nästa om denne är samma som föregående. :i

Och detta löser problemet med att enbart visa ID med det senaste löpnumret, eftersom det är okej med flera poster i db:n, bara de har olika löpnummer.

Fast jag ser min databaslärare(VäxjöUniversitet) framför mig med sur min då denne har sagt att en databasstruktur som kräver programmering för att ge ett önskvärt resultat istället för att lösa detta med SQL är en dålig db. :r

Men jag löste det iallafall temporärt och kan tänka på annat i helgen! :birp

Medlem sedan dec. 200012 464 inlägg
#7
SELECT TOP 25 *
FROM tblPostLista tpl
where post_id_lopnr = (
select max (post_id_lopnr) from tblPostLista
where post_id = tpl.post_id )
ORDER BY Post_Datum DESC
265 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
131 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
133 ms — ändringar (db)