Permalänk
Entusiast
Skrivet av nsky|sct:

hur ska man göra för sortera på datum i stället?

id, datum, bild
1, 2012-01-12, bild1
3, 2011-01-13, bild2
5, 2011-02-14, bild3
6, 2012-03-13, bild4
7, 2012-01-15, bild5

säg att man har precis tittat på bild3 som har id 5 och vill sedan titta på nästa bild i datum följd.

så här gör jag nu men det är en riktigt skit lösning

id = FixaTecken(Request.QueryString("id")) if id = "" then id = FixaTecken(Request.Cookies ("fotoalbum")("lastID")) SQL = "SELECT * FROM images film = false ORDER BY datum Desc" RS.Open SQL, conn, adOpenStatic, adLockOptimistic if not rs.eof then do while not rs.eof 'and rs("id") <> val(id) if rs("id") = val(id) then exit do rs.movenext loop if not rs.eof then select case Request.QueryString("c") case "1" rs.moveprevious if rs.bof then rs.movelast case "2" rs.movenext if rs.eof then rs.movefirst case else end select Set ctrl = server.createobject("GflAx.GflAx") Response.Cookies("fotoalbum")("lastID") = rs("id") ctrl.LoadBitmap "C:\Inetpub\wwwroot\fotoalbum\bilder\" & rs("userName") & "\" & rs("id") & ".jpg" rs.close set rs = nothing conn.Close set conn = nothing x = val(FixaTecken(Request.QueryString("x"))) y = val(FixaTecken(Request.QueryString("y"))) if x > 0 and y > 0 then xscale = x / ctrl.OriginalWidth yscale = y / ctrl.OriginalHeight if xscale <= 1 or yscale <= 1 then if xscale > yscale then res = yscale else res = xscale end if ctrl.Resize ctrl.OriginalWidth * res, ctrl.OriginalHeight * res end if else xscale = 800 / ctrl.OriginalWidth yscale = 800 / ctrl.OriginalHeight if xscale > yscale then res = yscale else res = xscale end if ctrl.Resize ctrl.OriginalWidth * res, ctrl.OriginalHeight * res end if response.contenttype = "image/jpeg" response.binarywrite ctrl.SendBinary set ctrl=nothing end if else end if

Du behöver inte utföra någon sortering i efterhand. Du kan utföra all sortering direkt i SQL-kommandot. Vilket du redan gör.

SQL strängen du anger i koden ovan:

SELECT * FROM images ORDER BY datum DESC;

Lägg märke till ORDER klasen.
Du behöver inte utföra någon ytterligare sortering.

För att bläddra mellan bilderna får du lov att lämna 'id' och istället införa en 'row' som talar om vilken rad som skall läsas in, baserad på den tidigare SQL-snuttarna vi har gett dig, med offset, eller den jag gav dig med operatorerna.

Visa signatur

Bästa programmen till Linux - v2.0
Linux-guide: Val av grafisk miljö. (Att välja distribution).
-
Everyone should have a SGoC in their systems (SGoC: SysGhost on a Chip)

Permalänk
Skrivet av nsky|sct:

får tyvärr inte SQL frågan att funka, detta är tyvärr en access databas vet inte om LIMIT funkar där.

Edit: Sorry missade att det var en Access-databas, utgick från att det var MySQL. Access verkar inte stödja LIMIT, ber om ursäkt om jag förvirrade dig.

Permalänk
Entusiast
Skrivet av WDac:

dum fråga kanske, men är de typ som ett groomscript som i tabellen som jämför om filen finns kvar eller ej? om ej så tar den bort rade i tabellen/tabellerna för att filen ej finns längre.

Vet inte om din fråga ens är relevant för tråden ifråga.
Vad är filen du nämner för något? Tänker du på databasen ifråga?

Ta bort rader i tabellen? Menar du databasen igen?
SQL-kommandot "SELECT" läser bara dem efterfrågade raderna. Det finsn inget där som tar bort någonting ur databasen. För det behövs andra kommandon.

...eller är det jag som missuppfattar frågan?

Visa signatur

Bästa programmen till Linux - v2.0
Linux-guide: Val av grafisk miljö. (Att välja distribution).
-
Everyone should have a SGoC in their systems (SGoC: SysGhost on a Chip)

Permalänk
Medlem
Skrivet av SysGhost:

Vet inte om din fråga ens är relevant för tråden ifråga.
Vad är filen du nämner för något? Tänker du på databasen ifråga?

Ta bort rader i tabellen? Menar du databasen igen?
SQL-kommandot "SELECT" läser bara dem efterfrågade raderna. Det finsn inget där som tar bort någonting ur databasen. För det behövs andra kommandon.

...eller är det jag som missuppfattar frågan?

mja jag menade att man kan väl grooma tabellerna i databasen om filerna i fråga inte finns vid filnamns syncning.

där med ta bort row´s i databasen som inte kan länka till en fil som inte längre finns, på så sätt så slipper man problemet att blädda i ett bibliotek där bildfilerna inte längre finns men försöker visas då databasen säger att dem skall ligga på //Share/Pics/20120131/ tex

jag ifråga satte inte din SQL fråga.

Visa signatur

|Workstation: AMD Ryzen 9 7900X 4.7GHz | ASRock X670E | AMD Radeon 7900 XT | 32GB DDR5 | NVMe 2.0TB | HDD 4.0TB |
|VMware rig: AMD Threadripper 2920x | ASUS PRIME X399-A | 24GB DDR4 | 10TB Storage |
|HTPC: AMD Ryzen 3 2200G 3.7 GHz | Gigabyte B450M DS3H | Radeon Vega 8 | 8GB RAM | SSD 120GB | *Test rig för div Linux distar, drivers m.m.

Permalänk
Entusiast
Skrivet av WDac:

mja jag menade att man kan väl grooma tabellerna i databasen om filerna i fråga inte finns vid filnamns syncning.

där med ta bort row´s i databasen som inte kan länka till en fil som inte längre finns, på så sätt så slipper man problemet att blädda i ett bibliotek där bildfilerna inte längre finns men försöker visas då databasen säger att dem skall ligga på //Share/Pics/20120131/ tex

jag ifråga satte inte din SQL fråga.

Aha.
Jo. Men då återkommer vi till problemet med att skapa en matris för över 10 000 bilder och låta javascripten hantera den.
Det är inte så effektivt, och javascript tendererar att slöa ner hela webbläsaren när det kommer till "större" datamängder.
Alternativt bara överföra några rader i taget, men då återkommer vill problemet med att överföra data mellan servern och klienten utan att ladda om sidan.

Det är effektivare att använda korrekt SQL-förfrågan, och anpassa koden på server-sidan så att data kan överföras på förfrågan utan att ladda om sidan, vilket är fullt möjligt. Frågan är bara huruvida TS kan/vill implementera detta.

Det hela bryter ner till att TS först försökte använda ID +/- 1 för att bläddra. Det förslag som ges är att istället använda databasrad +/- 1 för att bläddra, och man löser problemet med "saknade" IDn.
Goda förslag har redan getts. Det enda som återstår är för TS att implementera detta.

Visa signatur

Bästa programmen till Linux - v2.0
Linux-guide: Val av grafisk miljö. (Att välja distribution).
-
Everyone should have a SGoC in their systems (SGoC: SysGhost on a Chip)

Permalänk
Medlem
Skrivet av Full Strike:

Edit: Sorry missade att det var en Access-databas, utgick från att det var MySQL. Access verkar inte stödja LIMIT, ber om ursäkt om jag förvirrade dig.

I ANSI SQL använder man TOP istället för LIMIT.

SELECT TOP 1 *
FROM tabell
WHERE kolumn
ORDER BY kolumn

Permalänk
Medlem

men top har inte riktigt samma funktioner som limit verkar det som

Visa signatur

ʕ•͡ᴥ•ʔ

Permalänk
Entusiast
Skrivet av nsky|sct:

men top har inte riktigt samma funktioner som limit verkar det som

Fungerar stort sett på samma sätt.
När du utför en SQL-förfrågan får du många gånger tillbaks ett svar som består av mer än en rad.
LIMIT begränsar antalet rader till det antal man anger. I regel toppraderna.
TOP gör detsamma, men som namnet avslöjar, så markerar den alltid toppraderna av ett resultat.

Skillnaden är, som föreslagits, att TOP anges tidigt i förfrågan, medans LIMIT anges senare. Ordningen på respektive klas är viktig. Resultaten är densamma.

Visa signatur

Bästa programmen till Linux - v2.0
Linux-guide: Val av grafisk miljö. (Att välja distribution).
-
Everyone should have a SGoC in their systems (SGoC: SysGhost on a Chip)

Permalänk
Medlem

men med limit kan man ju skicka med två variabler LIMIT 5, 5 hur gör man det med top?

Visa signatur

ʕ•͡ᴥ•ʔ

Permalänk
Medlem
Skrivet av nsky|sct:

men med limit kan man ju skicka med två variabler LIMIT 5, 5 hur gör man det med top?

I T-SQL får man använda sig av ROW_NUMBER funktionen då LIMIT inte existerar, tveksam dock om denna fungerar i Access.

Något i stil med;

SELECT * FROM
( SELECT *, Row_Number() OVER (ORDER BY kolumn) AS radnummer
FROM tabell ) AS X
WHERE X.radnummer BETWEEN 5 AND 5