[php] laagst beschikbare UserID in database

Pagina: 1
Acties:

  • smaij
  • Registratie: November 2000
  • Laatst online: 14:27
ok dan. Met het volgende functievoorbeeld wil ik op een moeilijke manier de laagst mogelijke beschikbare UserID uit een database halen. Hoe doe ik dit zonder te veel laadtijd??
Bestaat er toevallig niet een functie in Mysql/php zelf hiervoor. Het script werkt overigens wel, maar ben benieuwd, lijkt me iets veel voorkomends
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Function GetEmptyUserID(){
 $Query = mysql_query("SELECT UserID FROM users");
 $Query_Rows = mysql_num_rows($Query); 
 $completed = 0;
 $UserIDgetal = 0;
  if (!$Query_Rows){
   return 1; 
  }
  Else {
   while ($UserIDgetal <= $Query_Rows){
     $Query_Array = mysql_fetch_array($Query);
     $Query_UserID = $Query_Array["UserID"];  
     IF ($Query_UserID != $UserIDgetal){
    return $UserIDgetal;
     }
     Else {
    If ($UserIDgetal == $Query_Rows){
     $UserIDgetal++;
     return $UserIDgetal;
    }
     }
     $UserIDgetal++; 
   } 
  }
}

Verwijderd

volgens mij kan dit gewoon met een mysql select, weet zo niet uit me hoofd maar waarsch met distinct en limit

Verwijderd

select UserId from users order by UserId LIMIT 0, 1

  • thijsc
  • Registratie: Augustus 2000
  • Laatst online: 22-12-2023
De hoogste userid in de tabel:

SELECT MAX(userid) FROM user;

De laagste userid in de tabel (je raadt het al ;-))

SELECT MIN(userid) FROM user;

  • smaij
  • Registratie: November 2000
  • Laatst online: 14:27
Op zondag 16 december 2001 18:26 schreef tijnbraun het volgende:
select UserId from users order by UserId LIMIT 0, 1
explain me please??? :)

  • smaij
  • Registratie: November 2000
  • Laatst online: 14:27
Op zondag 16 december 2001 18:34 schreef thijsc het volgende:
De hoogste userid in de tabel:

SELECT MAX(userid) FROM user;

De laagste userid in de tabel (je raadt het al ;-))

SELECT MIN(userid) FROM user;
Hierbij krijg je min userid toch de waarde die het eerst bekent is bij het systeem, zoals 1 ofzo.. als die als eerste in de database voorkomt???

Verwijderd

maar dat wilde je toch?
sorry ik ben dom ....
je wilt laagtste id die niet in gebuik is, of niet?

  • DiedX
  • Registratie: December 2000
  • Laatst online: 19:31
Nee hoor, de laagste id(s)

DiedX supports the Roland™, Sound Blaster™ and Ad Lib™ sound cards


  • smaij
  • Registratie: November 2000
  • Laatst online: 14:27
Ik bedoel de laagst mogelijke beschikbare UserID

stel je hebt 10 users.. en je haalt weg userid 3, dan moet dus een functie userid 3 kunnen selecteren. als dat niet het geval is, moet de functie een opvolgende waarde van de laatste userid geven. dus als 10 het laatste ID is, word het dus 11.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16:30

Janoz

Moderator Devschuur®

!litemod

Nou.. Als het werkelijk het laagst mogelijke beschikbare ID moet zijn.... VERGEET HET MAAR...

Ten eerste is het compleet overbodig.. Een UNSIGNED INT gaat tot 2^32=4294967296... Tegen de tijd dat je nummers opmaken heeft de halve wereldbevolking al een acount..

Daarnaast zorgt de manier waarop jij het doet (en veel andere manieren trouwens ook) voor race-problemen (als 2 user op hetzelfde moment een acount aanvragen kunnen ze dezelfde userID krijgen)


Voor dit soort dingen hebben ze bij SQL juist speciaal autoincrement bedacht, dus gebruik het ook....

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • smaij
  • Registratie: November 2000
  • Laatst online: 14:27
Op zondag 16 december 2001 20:54 schreef Janoz het volgende:
Nou.. Als het werkelijk het laagst mogelijke beschikbare ID moet zijn.... VERGEET HET MAAR...

Ten eerste is het compleet overbodig.. Een UNSIGNED INT gaat tot 2^32=4294967296... Tegen de tijd dat je nummers opmaken heeft de halve wereldbevolking al een acount..

Daarnaast zorgt de manier waarop jij het doet (en veel andere manieren trouwens ook) voor race-problemen (als 2 user op hetzelfde moment een acount aanvragen kunnen ze dezelfde userID krijgen)


Voor dit soort dingen hebben ze bij SQL juist speciaal autoincrement bedacht, dus gebruik het ook....
Dat is waar.. Maar het is toch altijd zo dat 2 users die op dezelfde tijd registreren problemen kunnen opleveren. Daardoor moet er gecontroleerd worden bij het INPUT INTO Sql statement. Daarna loop je alles nog een keer langs, als blijkt dat fouten bij het invoegen zijn. Snappie??

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16:30

Janoz

Moderator Devschuur®

!litemod

Dat is dus niet altijd zo.. Als je autoincrement gebruikt heb je hier juist niet last van.. Je geeft immers geen ID mee, je laat het door de DB zelf bepalen. In de MySQL handleiding is hier wel van alles over te lezen....

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • thijsc
  • Registratie: Augustus 2000
  • Laatst online: 22-12-2023
Ga eerst maar eens een uitleg over Database ontwerp lezen.

Een id is altijd een uniek nummer wat 1 keer uitgegeven wordt, ook als die record later weer verwijderd wordt.
Pagina: 1