WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Mysql/asp - Id För Senast Inlagd (https://www.wn.se/forum/showthread.php?t=306)

foks 2003-08-24 13:55

När jag med phpmyadmin lägger in en ny rad i min tabell så skriver den ut vilket id-nummer den nya raden fick. Hur ordnar jag det enklast i ett asp-script?

orreborre 2003-08-24 15:51

Jag kan inget om ASP då jag kodar i PHP, men detta kanske hjälper?

http://www.4guysfromrolla.com/webtech/tips...t122600-1.shtml

foks 2003-08-24 18:29

Tackar! Det hjälpte en bit på vägen. Fast som det är nu måste jag göra två MySQL-frågor. Först en för att lägga in raden, och så en för att kontrollera vilket id-nummer den fick.

Jag skulle vilja klämma in det på en enda rad, typ så här:
SQL = "INSERT INTO foretag (epost, password) VALUES ('test','pass');SELECT @@IDENTITY FROM foretag"
Set rs = Connect.Execute(SQL)

Fast då får jag MySQL-fel i närheten av ";SELECT @@IDENTITY"

orreborre 2003-08-24 18:56

Detta hjälper dig nog inget, men i php skriver man bara:
Kod:

$sql = mysql_query("INSERT INTO ....");
$idt = mysql_insert_id();

Alltså en inbyggd funktion...

Det kanske finns något liknande i ASP?

orreborre 2003-08-24 19:54

Citat:

Originally posted by foks@Aug 24 2003, 04:29 PM
Tackar! Det hjälpte en bit på vägen. Fast som det är nu måste jag göra två MySQL-frågor. Först en för att lägga in raden, och så en för att kontrollera vilket id-nummer den fick.

Jag skulle vilja klämma in det på en enda rad, typ så här:
SQL = "INSERT INTO foretag (epost, password) VALUES ('test','pass');SELECT @@IDENTITY FROM foretag"
Set rs = Connect.Execute(SQL)

Fast då får jag MySQL-fel i närheten av ";SELECT @@IDENTITY"

Det är ingen skillnad i tid om du lägger så som du skrev, eller om du gör det på 2 rader.
Det blir fortfarande 2 frågor till databasen.

Kim Torvanger 2003-08-24 23:13

Aspsidan.nu ;)

Omg33k 2003-08-25 05:26

Jag har mitt egna sätt..

Efter jag lagt in nått i databasen uppdaterar jag den (recset.update) och väljer sista posten.. alltså:

Select TOP 1 * From tabell ORDER BY id DESC

hämtar det högsta ID:t.. oftast det senaste.

knafve 2004-09-15 23:23

Citat:

Originally posted by Omg33k@Aug 25 2003, 05:26
Jag har mitt egna sätt..

Efter jag lagt in nått i databasen uppdaterar jag den (recset.update) och väljer sista posten.. alltså:

Select TOP 1 * From tabell ORDER BY id DESC

hämtar det högsta ID:t.. oftast det senaste.

Eru galen eller? Har hört att det är spöstraff på att skriva sådan kod juh. :)
Den koden kommer ju utan tvekan att returnera fel värde förr eller senare.

Anders 2004-09-15 23:53

Citat:

Originally posted by knafve@Sep 15 2004, 23:23
Eru galen eller? Har hört att det är spöstraff på att skriva sådan kod juh. :)
Den koden kommer ju utan tvekan att returnera fel värde förr eller senare.

Samma sak med koden som orreborre postade med mysql_insert_id();
Jag brukar, för att vara på den säkra sidan, ställa en fråga till databasen med de värden jag nyss lade in för att få id på den nya raden.

gabriel 2004-09-16 00:14

Citat:

Ursprungligen postat av Anders
Citat:

Ursprungligen postat av knafve
Eru galen eller? Har hört att det är spöstraff på att skriva sådan kod juh. :)
Den koden kommer ju utan tvekan att returnera fel värde förr eller senare.

Samma sak med koden som orreborre postade med mysql_insert_id();
Jag brukar, för att vara på den säkra sidan, ställa en fråga till databasen med de värden jag nyss lade in för att få id på den nya raden.

Är du säker på det där?
Jag har hört att just den funktionen i PHP skall klara av att få det id man stoppa in med egna scriptet senast...

esset 2004-09-16 00:17

Problemet kommer ju med ökningen av förfrågningar till databasen. Körs 5 inserts till databasen samtidigt och det laggar hos någon kommer person 1 få person 5:s post. Är ni med? Risky.

Bästa lösningen är som någon innan sa, kolla med samtliga värden som lades in och hämta den posten istället. Garanterat säkrast.

Anders 2004-09-16 01:11

Citat:

Originally posted by gabriel@Sep 16 2004, 00:14
Är du säker på det där?
Jag har hört att just den funktionen i PHP skall klara av att få det id man stoppa in med egna scriptet senast...

Kommer inte ihåg vart, men jag har läst att det kan bli fel och att man inte ska använda den utan att kontrollera resultatet. Och om man ändå ska kolla så är det ju desamma att göra det själv från första början.

Robert 2004-09-16 10:37

Citat:

Ursprungligen postat av Anders
Citat:

Ursprungligen postat av knafve
Eru galen eller? Har hört att det är spöstraff på att skriva sådan kod juh. :)
Den koden kommer ju utan tvekan att returnera fel värde förr eller senare.

Samma sak med koden som orreborre postade med mysql_insert_id();
Jag brukar, för att vara på den säkra sidan, ställa en fråga till databasen med de värden jag nyss lade in för att få id på den nya raden.

Jag gör på samma sätt...

ric 2004-09-16 10:59

"Id För Senast Inlagd"

får man fråga vad ni använder det till?

Per 2004-09-16 11:17

Citat:

Originally posted by ric@Sep 16 2004, 10:59
"Id För Senast Inlagd"

får man fråga vad ni använder det till?

Ex. vid en shop, då order läggs:

Lägg in i ordertabellen, få tillbaka order-id.
Lägg in varorna i varortabellen, i tabellen finns orderid för att veta vilka varor som hör till vilken order. Där används alltså order-id.

ZN 2004-09-16 11:34

Citat:

Originally posted by Anders@Sep 15 2004, 23:53
Samma sak med koden som orreborre postade med mysql_insert_id();
Det tvivlar jag på, men annars kan man för säkerhets skull skicka med "resource link identifiern".

Jester 2004-09-16 12:41

Skulle väl tro att du ha löst detta vid det här laget, men vad jag förstår från www.myswlfreaks.com lista över statements borde denna kod fungera alldeles utmärkt:

Kod:

SELECT LAST_INSERT_ID();
Citat:

You can generate sequences without calling LAST_INSERT_ID(), but the utility of using the function this way is that the ID value is maintained in the server as the last automatically generated value (multi-user safe).
Samma diskussion fast på ett annat forum:
http://www.experts-exchange.com/Data..._20709537.html

EDIT: Länk...

digiArt 2004-09-16 13:41

Frågan är om man inte bör köra application.lock också.

Kod:

Application.Lock()

Sätt in i db
Hämta last inserted

Application.Unlock()

Då hamnar alla andra "på kö"

Numet kör jag iof .NET och SQLServer, mucho enklare.

Robert 2004-09-16 14:31

Citat:

Originally posted by digiArt@Sep 16 2004, 13:41
Numet kör jag iof .NET och SQLServer, mucho enklare.
Finns det någon specialare för detta i .Net? Vad har jag missat här? =)

Starweb 2004-09-16 14:56

Det finns 3 sätt att göra på direkt i databas förfrågningen:
* LAST_INSERT_ID()
* @@IDENTITY
* MAX(Id)

Alltså tex: SELECT @@IDENTITY FROM databasnamn


LAST_INSERT_ID() och @@IDENTITY är samma/bra, MAX(Id) är inte att rekommendera dock.

knafve 2004-09-16 17:26

Citat:

Originally posted by Starweb@Sep 16 2004, 14:56
Det finns 3 sätt att göra på direkt i databas förfrågningen:
* LAST_INSERT_ID()
* @@IDENTITY
* MAX(Id)

Alltså tex: SELECT @@IDENTITY FROM databasnamn


LAST_INSERT_ID() och @@IDENTITY är samma/bra, MAX(Id) är inte att rekommendera dock.

Om man kör MS SQL ja. :)

Tacka vet jag Oracle. Där kan man hämta ut ett unikt nästa-id _innan_ man har kört INSERT. Det är grejer det...


Alla tider är GMT +2. Klockan är nu 15:18.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson