Jag har funderat på detta länge men har inte kommit på någon bra lösning. Nu måste jag få det att fungera.
Säg att jag har en tabell med mina rubriker i. I normala fall väljer man ORDER BY [x_ID] för att lista dom efter räknaren. Men om jag vill byta ordning på dom då!?
@nders, svarar du på denna måste du utveckla dig mer. Vad jag inte fattar är hur jag gör om jag plockar bort en rubrik.
rubrik 1 - id 1 - orderID - 1
rubrik 2 - id 2 - orderID - 2
rubrik 3 - id 3 - orderID - 3
rubrik 4 - id 4 - orderID - 4
Om jag tar bort trean måste ju ID 4 ha orderID 3. Are you with!?
rubrik 4 - id 4 - orderID - 3
------------------
Never underestimate your opponents.
Vad jag inte fattar är hur jag gör om jag plockar bort en rubrik.
när du vill ta bort posten ur databasen antar jag att du på sida 1 har en lista och en liten länk typ bla.asp?radera=4.
jag hade (nog) gjort så här. utöver id för posten hade jag också skickat med den postens orderid, som du kallade, så länken er ut typ såhär: bla.asp?radera=4&orderid=2.
i bla.asp ställer du din delete-fråga, samt en liten update för att ändra orderid på resten. exempel:
id = request.querystring("radera")
orderid = request.querystring("orderid")
strSQL1 = "delete from [tbl] where [x_id] = " & id
strSQL2 = "update [tbl] set [orderid]=[orderid]-1 where [orderid] > " & orderid
en liten execute på de båda sql-frågorna skulle väl göra susen :q
------------------
<A HREF="http://cartman.nu" TARGET=_blank>
if i'm not back in five minutes, just wait longer.</A>
För övrigt vill jag tillägga att jag gillar inte att skicka med fler värden än nödvändigt. Utifrån ID får man ju fram alla andra värden.
okej, jag är lite osäker på om en sån här subquery funkar i access, gör den inte det så har du ju alternativet att göra en select, en delete, och en update. jag håller hellre nere på antalet sql-frågor än antalet skickade värden.
strSQL2 = "update [tbl] set [orderid]=[orderid]-1 where [orderid] > (select [orderid] from [tbl] where [x_id] = " & id & ")"
som sagt, vet inte om denna typ av query funkar i access, men det får du prova. ;)
------------------
<A HREF="http://cartman.nu" TARGET=_blank>
if i'm not back in five minutes, just wait longer.</A>
Jag måste få tillvägagångssättet att fungera i Access för att sedan kunna använda det i MySQL! :-)
För övrigt tycker jag det är helt okej att använda övertydlig kod på en sida utan trafik.
Även om det går att göra kortare och "snyggare" är min uppfattning att om man skriver lite längre och där med mer förklarande kod behöver an inte dokumentera sitt arbete, koden blir självdokumenterande både för mig och andra.
Det är bara sidor med hög trafik på som det finns någon poäng i att optimera kod.
"älle-va-då-då-typ..."
------------------
Never underestimate your opponents.
tack för tipset! Nu är inte jag så där jätte storm förtjust i just den typen av lösningar så för min egen del så är det helt okej.
@nders, hur gör du med första och sista posten då? Den första ska ju inte gå att flytta upp och den sista ska inte gå att flytta ner. Upp är väl okej för då är talet > 1 ... gör du en SELECT COUNT(*) på den sista, får ett värde, och har det värdet som parameter...??
------------------
Never underestimate your opponents.
Vi de, du brukar inte svara på mina inlägg, men visst, det är helt okej! ;-)
Vaddå "Jet SQL"?? Det är intressant fråga du ställer för jag har erkligen ingen aning... Om jag skriver "mySQL.MoveNext" är det då access, sql, asp eller nå't annat.. Förmodligen inte access, men jag vet inte om det är asp eller sql!
Har du sett en databaskoppling i php? Det hade inte jag för två veckor sedan:
Det är intressant fråga du ställer för jag har erkligen ingen aning... Om jag skriver "mySQL.MoveNext" är det då access, sql, asp eller nå't annat.. Förmodligen inte access, men jag vet inte om det är asp eller sql!
Det är ADO, som man använder det i VBScript/ASP. ADO är, enkelt uttryckt, en samling funktioner för databasanvändning.
IF request("up") <> "" THEN
TMP1 = "SELECT * FROM [navigation] WHERE [x_id] = " & request("up") & ";"
set myTMP1 = Conn.Execute(TMP1)
POST1 = myTMP1("x_sortfield")
TMP2 = "SELECT [x_ID] FROM [navigation] WHERE [x_sortfield] = " & POST1 - 1 & ";"
set myTMP2 = Conn.Execute(TMP2)
POST2 = myTMP2("x_ID")
SQL2 = "UPDATE [navigation] SET [x_sortfield] = " & POST1 & " WHERE [x_ID] = " & POST2 & ";"
SQL1 = "UPDATE [navigation] SET [x_sortfield] = " & POST1 - 1 & " WHERE [x_ID] = " & request("up") & ";"
Conn.Execute(SQL2)
Conn.Execute(SQL1)
ELSEIF request("down") <> "" THEN
TMP1 = "SELECT * FROM [navigation] WHERE [x_id] = " & request("down") & ";"
set myTMP1 = Conn.Execute(TMP1)
POST1 = myTMP1("x_sortfield")
TMP2 = "SELECT [x_ID] FROM [navigation] WHERE [x_sortfield] = " & POST1 + 1 & ";"
set myTMP2 = Conn.Execute(TMP2)
POST2 = myTMP2("x_ID")
SQL2 = "UPDATE [navigation] SET [x_sortfield] = " & POST1 & " WHERE [x_ID] = " & POST2 & ";"
SQL1 = "UPDATE [navigation] SET [x_sortfield] = " & POST1 + 1 & " WHERE [x_ID] = " & request("down") & ";"
Conn.Execute(SQL2)
Conn.Execute(SQL1)
END IF
Phew!! ÄNTLIGEN fungerar detta iallafall. DELETE funktionen ska väl endå inte vara lika jobbig... Länka så här:
index.asp?up=2
index.asp?down=2
Där tvåan representerar ID nummret. Min läsning kanske inte är den läckraset och met optimerade man kan tänka sig. Men jag värdesätter om man kan köra copy/paste i fortsättningen (och det kan man nu) samt om funktionen fungerar i asp och med php och med access och mysql och i framtiden även sql server.
Jag tror inte det krävs så stora ingrepp för att få koden att fungera med php... kommer tid kommer råd!
------------------
Never underestimate your opponents.
262 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849