Automatisk genereret id i MySql tabel

Tags:    php

User
Bruger #951 @ 22.08.02 23:18
Hej,

Jeg har et lille spørgsmål som jeg håber nogen kan svare på:

Jeg har en tabel i MySql som en evt. bruger af min side taster data ind i ved hjælp af en form på siden. Denne tabel får et automatisk genereret id felt (autoincremented). Når jeg har "hældt" data ned i tabellen vil jeg gerne have fat i det netop genererede id, som jeg skal bruge til videre reference... Hvordan gør jeg dette??
Jeg har overvejet muligheden for simpelthen at søge tabellen igennem og så snuppe det højeste id nummer, men jeg mener ikke denne metode er sikker nok hvis flere brugere indtaster data i tabellen på samme tid...

Håber nogen har en bedre løsning til dette.

Mvh - Martin Holm Kristiansen



10 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 5 karma
Sorter efter stemmer Sorter efter dato
Hej,

Jeg har overvejet muligheden for simpelthen at søge tabellen igennem og så snuppe det højeste id nummer, men jeg mener ikke denne metode er sikker nok hvis flere brugere indtaster data i tabellen på samme tid...

Håber nogen har en bedre løsning til dette.

Mvh - Martin Holm Kristiansen


Der er selvfølgelig kun en mulighed for at være sikker på at en anden bruger ikke har opdateret på samme tid.

Du skal have en kolonne på din tabel hvori brugernr står.

Så laver du din insert into tabel data, brugernr values data, bruger

Herefter: Select max[id] from tabel where brugernr = bruger.

Så kommer du udenom at en anden har fået et højere id., samt du får dokumenteret hvem der egentlig har lavet rækken.


Med venlig hilsen

Klaus Egvang






Hej,

Jeg har et lille spørgsmål som jeg håber nogen kan svare på:

Jeg har en tabel i MySql som en evt. bruger af min side taster data ind i ved hjælp af en form på siden. Denne tabel får et automatisk genereret id felt (autoincremented). Når jeg har "hældt" data ned i tabellen vil jeg gerne have fat i det netop genererede id, som jeg skal bruge til videre reference... Hvordan gør jeg dette??
Jeg har overvejet muligheden for simpelthen at søge tabellen igennem og så snuppe det højeste id nummer, men jeg mener ikke denne metode er sikker nok hvis flere brugere indtaster data i tabellen på samme tid...

Håber nogen har en bedre løsning til dette.

Mvh - Martin Holm Kristiansen


Hejsa, du kan gøre som du selv nævner, ellers så prøv noget alla det her:

<pre>
<?php
$query = "select count(*) as antal from tabel";
$data = mysql_query($query);
while ($row = mysql_fetch_array($data)){
$id = $row['id'] + 1;
}
$insert = "insert into tabel (id, .........) values('$id',........);
mysql_query($insert);
?>
</pre>

Det burde gøre det.

Mvh
Kaare



User
Bruger #951 @ 23.08.02 13:12

Hejsa, du kan gøre som du selv nævner, ellers så prøv noget alla det her:

<pre>
<?php
$query = "select count(*) as antal from tabel";
$data = mysql_query($query);
while ($row = mysql_fetch_array($data)){
$id = $row['id'] + 1;
}
$insert = "insert into tabel (id, .........) values('$id',........);
mysql_query($insert);
?>
</pre>

Det burde gøre det.

Mvh
Kaare


Det lyder som en udemærket ide (har dog ikke prøvet det endnu).
Men vil der ikke være en teoretisk mulighed for at to brugere spørger samtidig på den højeste id og dermed skriver til den samme id, hvormed den ene selvfølgelig bare overskriver den anden??



Hej,

Jeg har et lille spørgsmål som jeg håber nogen kan svare på:

Jeg har en tabel i MySql som en evt. bruger af min side taster data ind i ved hjælp af en form på siden. Denne tabel får et automatisk genereret id felt (autoincremented). Når jeg har "hældt" data ned i tabellen vil jeg gerne have fat i det netop genererede id, som jeg skal bruge til videre reference... Hvordan gør jeg dette??
Jeg har overvejet muligheden for simpelthen at søge tabellen igennem og så snuppe det højeste id nummer, men jeg mener ikke denne metode er sikker nok hvis flere brugere indtaster data i tabellen på samme tid...

Håber nogen har en bedre løsning til dette.

Mvh - Martin Holm Kristiansen

Hejsa, du kan gøre som du selv nævner, ellers så prøv noget alla det her:

<pre>
<?php
$query = "select count(*) as antal from tabel";
$data = mysql_query($query);
while ($row = mysql_fetch_array($data)){
$id = $row['id'] + 1;
}
$insert = "insert into tabel (id, .........) values('$id',........);
mysql_query($insert);
?>
</pre>

Det burde gøre det.

Mvh
Kaare

Altså man skal være MEGET heldig hvis at 2 skal gøre det på samme tid, desuden skal ens side være meget populær hvis man skal opleve at 2 brugere er på hele tiden, jeg tror aldrig at du vil opleve at 2 indsætter det samtidig.

Mvh
Kaare



Se nedenfor
[Redigeret d. 23/08-02 15:43:46 af Klaus Egvang]



Ups, jeg trykkede vist send for hurtigt.

Jeg er enig i Kaare's betragtning, men spørgeren giver udtryk for at han godt kender den metode du lægger frem. Samtidig udtrykker han bekymring for om to brugere teoretisk kan få fat i det samme nummer.

Men det du skriver kan også opnåes med $selectSQL=mysql_query(select MAX(id) as id from tabel)

så får man max id'et. Hvis man derimod ønsker det pr bruger, så skal man bare sætte where brugernr = '$brugernr' ind.

Brugernr har man så fra et login eller måske en session.

MVH Klaus.





Ups, jeg trykkede vist send for hurtigt.

Jeg er enig i Kaare's betragtning, men spørgeren giver udtryk for at han godt kender den metode du lægger frem. Samtidig udtrykker han bekymring for om to brugere teoretisk kan få fat i det samme nummer.

Men det du skriver kan også opnåes med $selectSQL=mysql_query(select MAX(id) as id from tabel)

så får man max id'et. Hvis man derimod ønsker det pr bruger, så skal man bare sætte where brugernr = '$brugernr' ind.

Brugernr har man så fra et login eller måske en session.

MVH Klaus.



ja du har ret, men det er umuligt at sikre sig i mod at 2 brugere gør det på samme tid, hvis de gør det vil begge jo få samme resultat, derfor kan andet jo ikke lade sig gøre.

Mvh
Kaare



ja du har ret, men det er umuligt at sikre sig i mod at 2 brugere gør det på samme tid, hvis de gør det vil begge jo få samme resultat, derfor kan andet jo ikke lade sig gøre.



Og sådan kan vi blive ved. :-) Det er naturligvis en forudsætning af hver bruger har sit eget id. Men det har de jo. Hvordan skulle et login script ellers virke? Man kan jo også bruge session nummeret. Det er jo unikt, og sikkert indexeret på brugertabellen hvis der er en sådan.

Men jeg håber da at spørgeren har fået nogle ideer.

MVH Klaus.





ja du har ret, men det er umuligt at sikre sig i mod at 2 brugere gør det på samme tid, hvis de gør det vil begge jo få samme resultat, derfor kan andet jo ikke lade sig gøre.



Og sådan kan vi blive ved. :-) Det er naturligvis en forudsætning af hver bruger har sit eget id. Men det har de jo. Hvordan skulle et login script ellers virke? Man kan jo også bruge session nummeret. Det er jo unikt, og sikkert indexeret på brugertabellen hvis der er en sådan.

Men jeg håber da at spørgeren har fået nogle ideer.

MVH Klaus.



Ja det er jo rigtig nok, sååå jeg tror ikke at der er så mange flere svar at give.

Mvh
Kaare



User
Bruger #951 @ 24.08.02 15:04
Mange tak til jer begge to!!!

Jeg er endt op med at bruge Clauses forslag med: $selectSQL = mysql_query("select MAX(id) as id from tabel") for at få det sidst indtastede id.

Jeg tror jeg kom til at formulere mig lidt uhensigtsmæssigt i mit indlæg da jeg snakkede om brugere, for der er ikke tale om registrerede brugere, så det er lidt svært at få dem med i tabellen.
Det jeg skal bruge det til er en form som "besøgende" på siden kan udfyldes hvorefter en forespørgsel bliver sendt afsted til rette vekommende.

Jeg tror at sandsynligheden bliver meget lille for at to besøgende skulle sende en forespørgsel samtidig og skulle det vise sig at blive et problem må jeg tage det op senere...

Endnu engang tak for jeres forslag - Martin



t