Avatar billede labisama Nybegynder
19. juli 2009 - 18:21 Der er 11 kommentarer og
1 løsning

Opdatere alle rækker med rand?

Hej med jer!

Hvordan opdaterer jeg nemmest alle rækker i en tabel?

Jeg skal have "indsat" et tilfældigt nummer fra 1 til 9 i feltet rand_num i alle rækker.

Har prøvet med noget for-loop, men så får rand_num desværre alle det samme nummer - hvilket ikke er tiltænkt.

På forhånd tak.
Avatar billede repox Seniormester
19. juli 2009 - 18:27 #1
Må vi se den for løkke du har forsøgt dig med?
Avatar billede majbom Novice
19. juli 2009 - 18:33 #2
ved ikke om det kan gøres smarter, men ellers burde det her kunne gøre det:

$res = mysql_query("SELECT id FROM tabel");

while($rows = mysql_fetch_assoc($res)){
  $rand_num = rand(1,9);
  mysql_query("UPDATE tabel SET rand_num='".$rand_num."' WHERE id='".$rows['id']."'");
}

det er dog utestet...
Avatar billede labisama Nybegynder
19. juli 2009 - 18:37 #3
#2 > Smid et svar... Virkede!
Avatar billede repox Seniormester
19. juli 2009 - 18:45 #4
Bare lige for at supplere:
Hvis det er noget du skal gøre mere end en gang (altså, ikke bare nogen umiddelbar løsning) ville det være bedre at optimere det til en enkelt SQL forespørgsel:
<?php
    $sql = "UPDATE tabel SET rand_num=FLOOR(0 + (RAND() * 10))";
    mysql_query($sql);
?>
Avatar billede elkoger Nybegynder
19. juli 2009 - 19:13 #5
bare lige ekstra info, det eksempel der er i #4 gør det samme som det du har, men hvis man ikke definere en where i UDPATE vil den gå ud fra at det alle tabeller der skal ændres på :)
Avatar billede majbom Novice
19. juli 2009 - 19:21 #6
-> #4 - den tænkte jeg også på, men vil den ikke smide det samme tal ind i alle rækker?

-> #5 - du mener i alle rækker? og det er jo også det spørger beder om...
Avatar billede repox Seniormester
19. juli 2009 - 19:28 #7
#6
Nej, for udtrykket evalueres for hvert gennemløb.
Det er derfor at ORDER BY RAND() vil virke. Hvis RAND() gav det samme resultat i alle gennemløb ville ORDER BY ikke længere være tilfældig.
Avatar billede majbom Novice
19. juli 2009 - 19:38 #8
nej okay, ja så bør det være din løsning der bruges, daden kun laver et db-kald, hvor min laver ligeså mange som der er rækker, plus 1...
Avatar billede repox Seniormester
19. juli 2009 - 19:51 #9
Din løsning er nok ikke så resourcekrævende, men hvis det er noget man kommer til at gøre adskillige gange, bør man optimere sin kode så man får disponeret resourcerne med rimelighed. Det er også nogle gode vaner at indarbejde sig.
Avatar billede majbom Novice
19. juli 2009 - 20:34 #10
ja lige præcis, jeg var bare ikke klar over at det kunne gøres sådan, da jeg troede at den ville bruger samme tal i alle rækkerne.

men som du sier er det nok begrænset hvor meget forskel der er lige her, men det er jo god stil at gøre det så enkelt som muligt.
Avatar billede labisama Nybegynder
23. september 2009 - 11:53 #11
Svar tak.
Avatar billede repox Seniormester
23. september 2009 - 11:57 #12
Det fik du 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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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