Avatar billede playr Nybegynder
28. januar 2011 - 14:40 Der er 3 kommentarer og
1 løsning

Indsætte data i MySQL, hvis eksistere så loop til det ikke eksistere

Hej allesammen,

Jeg får oprettet et tilfældigt ID som skal sættes i en database. Hvis ID'et allerede eksisterer i data så skal den generere et nyt ID. Men problemet er at jeg laver det med if sætninger og det bliver for kludret.

F.eks.


$id = '500';

// Check
$checkQuery = mysql_query("SELECT * FROM tables WHERE id = '$id'") or die(mysql_error());   
if(mysql_num_rows($checkQuery) > 0){
  $id = rand(1,1000);       
}

// Check
$checkQuery = mysql_query("SELECT * FROM tables WHERE id = '$id'") or die(mysql_error());   
if(mysql_num_rows($checkQuery) > 0){
  $id = rand(1,1000);       
}

// Check
$checkQuery = mysql_query("SELECT * FROM tables WHERE id = '$id'") or die(mysql_error());   
if(mysql_num_rows($checkQuery) > 0){
  $id = rand(1,1000);       
}

// Check
$checkQuery = mysql_query("SELECT * FROM tables WHERE id = '$id'") or die(mysql_error());   
if(mysql_num_rows($checkQuery) > 0){
  $id = rand(1,1000);       
}

// Check
$checkQuery = mysql_query("SELECT * FROM tables WHERE id = '$id'") or die(mysql_error());   
if(mysql_num_rows($checkQuery) > 0){
  $id = rand(1,1000);       
}



Problemet med ovenstående er at den så kun checker x antal gange jeg checker om den eksistere eller ej. Hvordan kan jeg lave et loop hvor den checker om ID eksistere, og hvis den eksistere så bliver den ved med at checke og lave nyt ID til den har fundet et der er ledigt?

Lyder måske lidt sært, men skal bruge det til at generere et random ID for bestillinger og sørge for ikke at fjerne nogle eksisterende.

På forhånd tak :o)
Avatar billede playr Nybegynder
28. januar 2011 - 14:56 #1
Fandt selv svar:


// Laver random ID
$order_id = rand(1,1000);

// Laver while løkke til den finder ledigt ID
while(mysql_num_rows(mysql_query("SELECT id FROM orders WHERE number = '$order_id'")) > 0) {
    $order_id = rand(1,1000);
}
Avatar billede playr Nybegynder
28. januar 2011 - 14:56 #2
luk
Avatar billede repox Seniormester
28. januar 2011 - 15:22 #3
Af ren nysgerrighed - forventer du kun at du skal processere 1000 ordrer? Og hvorfor ikke bruge fortløbende numre, så det er nemmere at holde styr på odrenumrene?
Avatar billede majbom Novice
28. januar 2011 - 22:09 #4
undrer mig også over løsningen med rand - hvorfor ikke løbe dem igennem fortløbende, hvis du absolut skal gøre det på den måde? (med rand kan du risikere at skulle løbe løkken igennem mere end de 1000 gange - hvis du tager dem fra 1,2,3,4 osv. kommer du MAX til at køre den 1000 gange)

og hvis du har 1000 records vil din løkke køre til scriptet får timeout...

ville da bare bruge autoincrement - jeg forstår ikke grunden til den løsning du har valgt her
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester