Permalänk
Medlem

SQL "hoppa"

Går det att hoppa från ett id med x antal steg?

säg att jag har en databas som ser ut så här:

ID namn
1 bengt
2 olle
3 anders
4 rolf <-------- är här vill hoppa 2 steg så att jag hamnar på id 6
5 nisse
6 kent
7 jerker

går det att ställa en sådan fråga?

Visa signatur

ʕ•͡ᴥ•ʔ

Permalänk

Nu är jag absolut inget SQL proffs, men jag tror inte du kan använda '+' i WHERE.
Ex SELECT *
FROM hoppa
Where ID = 4+2; Funkar inte tror jag.

Använder du php något? Varför vill du göra så förresten?

Permalänk
Medlem
Skrivet av tachiibou:

Nu är jag absolut inget SQL proffs, men jag tror inte du kan använda '+' i WHERE.
Ex SELECT *
FROM hoppa
Where ID = 4+2; Funkar inte tror jag.

Använder du php något? Varför vill du göra så förresten?

Det går absolut att använda '+' i en WHERE-clause:

Citat:

Mysql-manualen, 13.2.9 SELECT syntax:
In the WHERE expression, you can use any of the functions and operators that MySQL supports, except for aggregate (summary) functions. See Section 9.5, “Expression Syntax”, and Chapter 12, Functions and Operators.

Permalänk
Entusiast

Normalt genererar man en färdig sträng med den SQL-queryn man vill köra i förväg. Det vill säga att alla matematiska operationer man behöver utföra för att få fram den ID man vill använda, sker i programmets kod och infogas sedan i strängen med SQL-queryn.

Exempel på hur det kan gå till i PHP:

$intVariable = 2; $intID = 4 + $intVariable; $result = mysql_query("SELECT * FROM Persons WHERE ID='" . $intID . "'");

Detta fungerar också:

$intVariable = 2; $result = mysql_query("SELECT * FROM Persons WHERE ID='" . 4 + $intVariable . "'");

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

Tänk på att man inte ska utgå från att alla id:n finns i tabellen. Rader kan ha tagits bort vid ett annat tillfälle. Det är med andra ord skillnad på att hämta raden med id = (n+2) och 2 rader efter raden n.

tabellen kan tex. se ut så här:
ID namn
1 bengt
2 olle
3 anders
4 rolf <-------- är här vill hoppa 2 steg så att jag hamnar på id 6
6 kent
7 jerker

Raden med id = (n+2) för n=4 är då 6 => kent, medan 2 rader efter är 7 jerker. Vet inte riktigt vad du försöker uppnå, men kan vara värt att tänka på.

Permalänk
Medlem

Har ett bild galleri där jag utgår från en viss bild (id), sedan ska kunna bläddra i galleriet genom ett värde + utgångsvärdet (id).

Nästa bild laddas med hjälp av javascript, så jag kan inte ändra ID.

document.onkeydown = function(evt) { evt = evt || window.event; if (evt.keyCode == 37) { count = count - 1; document.getElementById("imageID").src='http://......com/slide.asp?id=5&c=' + count + '&x=' + getWindowWidth() + '&y=' + getWindowHeight();

Visa signatur

ʕ•͡ᴥ•ʔ

Permalänk
Hedersmedlem
Skrivet av nsky|sct:

Har ett bild galleri där jag utgår från en viss bild (id), sedan ska kunna bläddra i galleriet genom ett värde + utgångsvärdet (id).

På den skulle jag nog vilja förslå att bilder som hämtas ut samlas i en "intern" (med det menar jag väl mer clientside) array (tex i javascript) som inte förlitar sig på databasens id'n utan använder arrayens idn.

Visa signatur

Dator, MOBO: Asus X99-A, CPU: Intel I7 6800k (3.4GHz), GPU: Geforce PNY 2070 Super, RAM: 4x8GB Corsair Vengeance LPX 2400MHz, OS-HDD: Intel 750 PCIe 400GB, PSU: EVGA SuperNOVA G2 850W

Permalänk
Medlem
Skrivet av Klorixx:

På den skulle jag nog vilja förslå att bilder som hämtas ut samlas i en "intern" (med det menar jag väl mer clientside) array (tex i javascript) som inte förlitar sig på databasens id'n utan använder arrayens idn.

Har 10000+ bilder i mitt galleri, blir en stor array för klienten

Visa signatur

ʕ•͡ᴥ•ʔ

Permalänk
Hedersmedlem
Skrivet av nsky|sct:

Har 10000+ bilder i mitt galleri, blir en stor array för klienten

Skall dessa samtliga 10 000+ bilder visas på sidan samtidigt tror jag du har ett annat problem än minneshanteringen i javascriptet tbh.

Visa signatur

Dator, MOBO: Asus X99-A, CPU: Intel I7 6800k (3.4GHz), GPU: Geforce PNY 2070 Super, RAM: 4x8GB Corsair Vengeance LPX 2400MHz, OS-HDD: Intel 750 PCIe 400GB, PSU: EVGA SuperNOVA G2 850W

Permalänk
Entusiast
Skrivet av Klorixx:

Skall dessa samtliga 10 000+ bilder visas på sidan samtidigt tror jag du har ett annat problem än minneshanteringen i javascriptet tbh.

Jo. Håller med.
Sådana här operationer sköter man normalt på serversidan.

TS: Vilket scriptspråk används på servern? (Gissar på PHP)
Och vad är det du vill göra med bilderna?
För bildvisning likt en katalog, så rekommenderar jag att man genererar flera sidor som man får bläddra emellan för att inte överbelasta klienten/servern med alla 10 000 bilderna på en gång.

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:

Jo. Håller med.
Sådana här operationer sköter man normalt på serversidan.

TS: Vilket scriptspråk används på servern? (Gissar på PHP)
Och vad är det du vill göra med bilderna?
För bildvisning likt en katalog, så rekommenderar jag att man genererar flera sidor som man får bläddra emellan för att inte överbelasta klienten/servern med alla 10 000 bilderna på en gång.

Det är en egen skriven server, men det är typ asp.
Jag visar inte alla 10000 bilder på en gång, utan den ska visa en bild i full skärms läge sedan när användaren trycker på höger eller vänster pil visas nästa bild.

Visa signatur

ʕ•͡ᴥ•ʔ

Permalänk
Hedersmedlem
Skrivet av nsky|sct:

Det är en egen skriven server, men det är typ asp.
Jag visar inte alla 10000 bilder på en gång, utan den ska visa en bild i full skärms läge sedan när användaren trycker på höger eller vänster pil visas nästa bild.

Min tanke här är väl att hämta ut kanske ~100 bilder som är lagom för en array (eller vad som känns bäst), när man "närmar" sig slutar (omkring 10 "kvar" då) så laddar den in 100 nya framåt samtidigt som den tar bort x bakom sig eller så.

Vet inte om det gick att tyda helt klokt, men det var min tanke kring det.

Visa signatur

Dator, MOBO: Asus X99-A, CPU: Intel I7 6800k (3.4GHz), GPU: Geforce PNY 2070 Super, RAM: 4x8GB Corsair Vengeance LPX 2400MHz, OS-HDD: Intel 750 PCIe 400GB, PSU: EVGA SuperNOVA G2 850W

Permalänk
Medlem

Om Du på servern har resultatet av en SQL-fråga i minnet kan Du just "hoppa" till en annan rad med data_seek, för PHP+mysql se:
http://se.php.net/manual/en/mysqli-result.data-seek.php

Har Du däremot säg id 4 på klienten och vill gå två steg framåt genom en fråga till servern görs det lämpligen med sortering i SQL-frågan, ex:
select ID, namn from tabell where ID>$aktuellt_id order by ID
så har Du raderna efter aktuellt id i resultatet. Är det just 2 steg fram kan Du fixa det genom att hänga på
limit 1,1

Men som sagt, det beror på vad det egentligen är Du vill göra - och hur

Visa signatur

Dell XPS 17 - RTX 2060 - 4k touch - ersätter MSI GS73VR efter tre år
Byggen: Simply Red med 950 Pro - Liten Lian Li

Permalänk
Medlem

Ang. array.
Låt oss inte glömma att en array inte innehåller själva bilderna utan referenser till bilderna. Databasen innehåller heller inga bilder utan bara var dom ligger på servern. Så en array på 10 000 "bilder" innehåller bara information om var dessa finns. När klienten trycker för att se nästa bild skickas bara ett nytt request objekt med informationen om nästa bilds id. Denna id används i en sql query för att leta rätt på den i databasen.

Permalänk
Medlem
Skrivet av segen:

Ang. array.
Låt oss inte glömma att en array inte innehåller själva bilderna utan referenser till bilderna. Databasen innehåller heller inga bilder utan bara var dom ligger på servern. Så en array på 10 000 "bilder" innehåller bara information om var dessa finns. När klienten trycker för att se nästa bild skickas bara ett nytt request objekt med informationen om nästa bilds id. Denna id används i en sql query för att leta rätt på den i databasen.

får bli kanske en array.
så här ser koden ut på klient sidan

<html> <head> <meta charset="utf-8"> <title>Fullscreen API</title> <script type="text/javascript"> var count = 0; function getWindowWidth() { var myWidth = 0; if( typeof( window.innerWidth ) == 'number' ) { myWidth = window.innerWidth; } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) { myWidth = document.documentElement.clientWidth; } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) { myWidth = document.body.clientWidth; } return myWidth; } function getWindowHeight() { var myHeight = 0; if( typeof( window.innerWidth ) == 'number' ) { myHeight = window.innerHeight; } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) { myHeight = document.documentElement.clientHeight; } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) { myHeight = document.body.clientHeight; } return myHeight; } function toggleFullScreen() { if ((document.fullScreenElement && document.fullScreenElement !== null) || // alternative standard method (!document.mozFullScreen && !document.webkitIsFullScreen)) { // current working methods if (document.documentElement.requestFullScreen) { document.documentElement.requestFullScreen(); } else if (document.documentElement.mozRequestFullScreen) { document.documentElement.mozRequestFullScreen(); } else if (document.documentElement.webkitRequestFullScreen) { document.documentElement.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT); } } else { if (document.cancelFullScreen) { document.cancelFullScreen(); } else if (document.mozCancelFullScreen) { document.mozCancelFullScreen(); } else if (document.webkitCancelFullScreen) { document.webkitCancelFullScreen(); } } } document.onkeydown = function(evt) { evt = evt || window.event; if (evt.keyCode == 37) { count = count - 1; document.getElementById("cancel-fullscreen").src='http://.....se/slide.asp?id=5&c=' + count + '&x=' + getWindowWidth() + '&y=' + getWindowHeight(); } if (evt.keyCode == 39) { count = count + 1; document.getElementById("cancel-fullscreen").src='http://....se/slide.asp?id=5&c=' + count + '&x=' + getWindowWidth() + '&y=' + getWindowHeight(); } } </script> </head> <body topmargin="0" leftmargin="0" bgcolor="#000000"> <div style="position:relative"> <div> <center><img src="http://.....se/slide.asp?x=1680&y=1050&id=5" id="cancel-fullscreen" onclick="toggleFullScreen()"></center> </div> </div> </body> </html>

Visa signatur

ʕ•͡ᴥ•ʔ

Permalänk
Entusiast

Problemet: Att bara köra Nuvarande ID +/- 1 när man trycker på knapparna för föregående / nästa bild kan resultera i att man försöker läsa in en bild-ID som inte existerar längre.
Lösning: Läs in föregående / nästa rad i förhållande till den nuvarande IDn.

En idé:
När en bild med ID "X" efterfrågas, kanske du bör se till att servern inte bara returnerar bilden ifråga, utan även en variabel med tre värden: Föregående ID, nuvarande ID och nästkommande ID.

För att läsa in föregående och/eller nästa rad i SQL (och därmed få reda på vilken ID respektive rad har), utför du följande förfrågningar:

Nästa rad i förhållande till nuvarande ID:

SELECT * FROM tablename WHERE id > '$currentId' ORDER BY id ASC LIMIT 1;

Samt föregående rad...

SELECT * FROM tablename WHERE id < '$currentId' ORDER BY id DESC LIMIT 1;

Skllnaden mellan föregående/nästa ligger enbart i WHERE-klasen, med operatorerna < och > .
För att läsa in fler rader före/efter nuvarande id $currentId, ändra bara siffran i "LIMIT". T.ex. "LIMIT 5 " för 5 rader före/efter nuvarande.
Variabeln $currentId" är den som representerar nuvarande rad/id.

EDIT: Förenklade SQL-koden. Tankevurpa.

EDIT 2, Tillägg:

För att ha en initial rad att utgå ifrån första gången utan att vara beroende av en fast id, är det enkelt att bara läsa in den allra första raden:

SELECT * FROM tablename ORDER BY id LIMIT 1;

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

Hur ska man då göra för att läsa in variabel utan att ladda om klient sidan, som det är nu så laddar den bara om bilden med hjälp av javascriptet, kan inte mycket javascript

Visa signatur

ʕ•͡ᴥ•ʔ

Permalänk
Hedersmedlem
Skrivet av SysGhost:

Samt föregående rad...

SELECT * FROM tablename WHERE id < '$currentId' LIMIT 1;

Nja, detta kommer alltid returnera första raden i tabellen (om det inte är just första raden som är $currentId - då returneras inget).

T ex om $currentId är 13, så kollar queryn på första raden, ser att `id` är 1, och 1 är mindre än 13 så den raden returneras.

Om man däremot även vänder på resultathögen så kan man lösa det:

SELECT * FROM tablename WHERE id < '$currentId' ORDER BY id DESC LIMIT 1

Fortfarande returneras inget om det handlar om första raden - men det är ju logiskt och precis vad man vill och får hanteras i koden.

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Entusiast
Skrivet av nsky|sct:

Hur ska man då göra för att läsa in variabel utan att ladda om klient sidan, som det är nu så laddar den bara om bilden med hjälp av javascriptet, kan inte mycket javascript

Det är funktionen för "onkeydown" som behöver ändras för att passa bättre.
Men du behöver också ändra koden i slide.asp

I det här fallet är det raderna med count -variabeln som måste bytas ut.
Jag vet inte vad _GET-variabeln 'c' har för funktion. Vad har 'id' och 'c' för förhållande?

Skapa två nya variabler: nextid och previd, och hämta innehållet i dem via SQL-kommandona jag gav dig tidigare.

Exempel:

document.onkeydown = function(evt) { evt = evt || window.event; if (evt.keyCode == 37) { var nextid = '<%= nextid %>'; document.getElementById("cancel-fullscreen").src='http://.....se/slide.asp?id=' + nextid + '&x=' + getWindowWidth() + '&y=' + getWindowHeight(); } if (evt.keyCode == 39) { var previd = '<%= previd %>'; document.getElementById("cancel-fullscreen").src='http://....se/slide.asp?id=' + previd + '&x=' + getWindowWidth() + '&y=' + getWindowHeight(); } }

Variablerna nextid och previd skapar du i slide.asp med hjälp av SQL-kommandona, och ser till att dem är publika.

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
Entusiast
Skrivet av phz:

Nja, detta kommer alltid returnera första raden i tabellen (om det inte är just första raden som är $currentId - då returneras inget).

T ex om $currentId är 13, så kollar queryn på första raden, ser att `id` är 1, och 1 är mindre än 13 så den raden returneras.

Om man däremot även vänder på resultathögen så kan man lösa det:

SELECT * FROM tablename WHERE id < '$currentId' ORDER BY id DESC LIMIT 1

Fortfarande returneras inget om det handlar om första raden - men det är ju logiskt och precis vad man vill och får hanteras i koden.

Ja självklart. Glömde ta med ORDER ;). Det är ändrat.

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 behöver man inte ladda om sidan då? för om jag gör det så hoppar chrome ur fullscreen

Visa signatur

ʕ•͡ᴥ•ʔ

Permalänk
Medlem
Skrivet av SysGhost:

Det är funktionen för "onkeydown" som behöver ändras för att passa bättre.
Men du behöver också ändra koden i slide.asp

I det här fallet är det raderna med count -variabeln som måste bytas ut.
Jag vet inte vad _GET-variabeln 'c' har för funktion. Vad har 'id' och 'c' för förhållande?

Skapa två nya variabler: nextid och previd, och hämta innehållet i dem via SQL-kommandona jag gav dig tidigare.

id är den första bilden, sedan hade jag tänkt använda 'c' för att hoppa så många steg framåt eller bakåt från id.
Men det verkar inte vara så smart.

Visa signatur

ʕ•͡ᴥ•ʔ

Permalänk
Entusiast
Skrivet av nsky|sct:

Men behöver man inte ladda om sidan då? för om jag gör det så hoppar chrome ur fullscreen

Jag har inte undersökt detta i detalj, men när din java laddar in slide.asp, så tror jag att den även uppdaterar dem nämnda variablerna jag nämde att du skulle skapa som publika.
Det är det som är den lilla hemligheten:
Dem här raderna som ser ut så här, snappar upp dem publika variaberna från servern:

var previd = '<%= previd %>';

var nextid = '<%= nextid %>';

Men som sagt, jag har tyvärr inte testat detta.
Det kan hända att du får överväga en omladdning av sidan.
Alternativt kan du låta slide.asp returnera en hel HTML-sida med den aktuella bilden tillsammans med dolda form fields med dem aktuella variablerna, och sedan låta javascriptet läsa in taggarnas värden m.h.a getElementById .

Skrivet av nsky|sct:

id är den första bilden, sedan hade jag tänkt använda 'c' för att hoppa så många steg framåt eller bakåt från id.
Men det verkar inte vara så smart.

Njae, jag tror det är bättre att bara använda 'id', och kanske skippa 'c' i det här fallet. Eftersom min idé baserar sig på att du redan hämtar rätt id-värden på en gång utan att behöva utföra någon matematik, så blir 'c' överflödig.

Jag hoppas du förstår vart jag är på väg med den här idén.

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:

id är den första bilden, sedan hade jag tänkt använda 'c' för att hoppa så många steg framåt eller bakåt från id.
Men det verkar inte vara så smart.

Varför inte bara använda en offset?

SELECT * FROM tablename ORDER BY id DESC LIMIT n,1

Där n är den n:te bilden man vill titta på.

Permalänk
Entusiast
Skrivet av Full Strike:

Varför inte bara använda en offset?

SELECT * FROM tablename ORDER BY id DESC LIMIT n,1

Där n är den n:te bilden man vill titta på.

Bra tips där. Jag tror att det är rätt klart hur TS gör med databasen.
Problemet som återstår nu är huruvida TS kan hämta hem nästa rad i databasen via javascript utan att behöva ladda om den aktuella vyn.
Möjligheter finns. Frågan är bara vad som är lättast att implementera.

Fråga till TS: Hur ser slide.asp ut? Behöver du ytterligare hjälp?
Tips: Om det blir för långt att posta koden direkt här i forumet, prova webbtjänsten pastebin

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

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

Visa signatur

ʕ•͡ᴥ•ʔ

Permalänk
Medlem
Skrivet av SysGhost:

Bra tips där. Jag tror att det är rätt klart hur TS gör med databasen.
Problemet som återstår nu är huruvida TS kan hämta hem nästa rad i databasen via javascript utan att behöva ladda om den aktuella vyn.
Möjligheter finns. Frågan är bara vad som är lättast att implementera.

Fråga till TS: Hur ser slide.asp ut? Behöver du ytterligare hjälp?
Tips: Om det blir för långt att posta koden direkt här i forumet, prova webbtjänsten pastebin

det är i slide.asp som jag hämtar ut nästa bild ur databasen sedan skickas den binärt

Visa signatur

ʕ•͡ᴥ•ʔ

Permalänk
Skrivet av nsky|sct:

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

Nejnejnej, som jag sa, använd en offset

På klientsidan (html/javascript):

<script type='text/javascript'> ... var n = 0; document.onkeydown = function(evt) { evt = evt || window.event; if (evt.keyCode == 37) { n--; document.getElementById("cancel-fullscreen").src='http://.....se/slide.asp?n=' + n + '&x=' + getWindowWidth() + '&y=' + getWindowHeight(); } if (evt.keyCode == 39) { n++; document.getElementById("cancel-fullscreen").src='http://....se/slide.asp?n=' + n + '&x=' + getWindowWidth() + '&y=' + getWindowHeight(); } } ... </script>

På serversidan (ASP):

n = FixaTecken(Request.QueryString("n")) If n = "" Then n = 0 SQL = "SELECT * FROM images WHERE film = false ORDER BY datum Desc LIMIT " & n & ",1" RS.Open SQL, conn, adOpenStatic, adLockOptimistic If Not rs.eof Then Set ctrl = server.createobject("GflAx.GflAx") 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

Permalänk
Medlem
Skrivet av Full Strike:

SQL = "SELECT * FROM images WHERE film = false ORDER BY datum Desc LIMIT " & n & ",1"

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

Visa signatur

ʕ•͡ᴥ•ʔ

Permalänk
Medlem
Skrivet av SysGhost:

Problemet: Att bara köra Nuvarande ID +/- 1 när man trycker på knapparna för föregående / nästa bild kan resultera i att man försöker läsa in en bild-ID som inte existerar längre.
Lösning: Läs in föregående / nästa rad i förhållande till den nuvarande IDn.

En idé:
När en bild med ID "X" efterfrågas, kanske du bör se till att servern inte bara returnerar bilden ifråga, utan även en variabel med tre värden: Föregående ID, nuvarande ID och nästkommande ID.

För att läsa in föregående och/eller nästa rad i SQL (och därmed få reda på vilken ID respektive rad har), utför du följande förfrågningar:

Nästa rad i förhållande till nuvarande ID:

SELECT * FROM tablename WHERE id > '$currentId' ORDER BY id ASC LIMIT 1;

Samt föregående rad...

SELECT * FROM tablename WHERE id < '$currentId' ORDER BY id DESC LIMIT 1;

Skllnaden mellan föregående/nästa ligger enbart i WHERE-klasen, med operatorerna < och > .
För att läsa in fler rader före/efter nuvarande id $currentId, ändra bara siffran i "LIMIT". T.ex. "LIMIT 5 " för 5 rader före/efter nuvarande.
Variabeln $currentId" är den som representerar nuvarande rad/id.

EDIT: Förenklade SQL-koden. Tankevurpa.

EDIT 2, Tillägg:

För att ha en initial rad att utgå ifrån första gången utan att vara beroende av en fast id, är det enkelt att bara läsa in den allra första raden:

SELECT * FROM tablename ORDER BY id LIMIT 1;

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.

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.