Avatar billede MartinJakobsen Nybegynder
07. marts 2012 - 08:58 Der er 6 kommentarer og
1 løsning

Hvordan indsætter jeg en while-lykke?

Hej!

Jeg har fundet følgende script, og vil gerne have et output der udskriver en while-lykke i stedet for bare en oversigt over arrays. Hvordan gør jeg det?

På forhånd tak,
Martin

<?php
  function random_row($table, $column) {
      $max_sql = "SELECT max(" . $column . ")
                  AS max_id
                  FROM " . $table;
      $max_row = mysql_fetch_array(mysql_query($max_sql));
      $random_number = mt_rand(1, $max_row['max_id']);
      $random_sql = "SELECT * FROM " . $table . "
                    WHERE " . $column . " >= " . $random_number . "
                    ORDER BY " . $column . " ASC
                    LIMIT 1";
      $random_row = mysql_fetch_row(mysql_query($random_sql));
      if (!is_array($random_row)) {
          $random_sql = "SELECT * FROM " . $table . "
                        WHERE " . $column . " < " . $random_number . "
                        ORDER BY " . $column . " DESC
                        LIMIT 1";
          $random_row = mysql_fetch_row(mysql_query($random_sql));
      }
      return $random_row;
  }
  echo '<pre>';
  print_r(random_row('YOUR_TABLE', 'YOUR_COLUMN'));
  echo '</pre>';
?>
Avatar billede inteeeL Nybegynder
07. marts 2012 - 09:40 #1
mysql_fetch_row returnerer jo blot et enkelt numerisk-indekseret array - altså der er ikke noget, du kan sætte ind i et loop(while). Umiddelbart vil jeg anbefale dig at bruge mysql_fetch_assoc, da du her kan bruger de respektive attributter fra databasen til at udskrive de pågældende data.

Læs følgende artikel (på engelsk):
http://php.net/manual/en/function.mysql-fetch-assoc.php
Avatar billede inteeeL Nybegynder
07. marts 2012 - 10:08 #2
Ovenstående er noget vrøvl. Du kan selvfølgelig godt hente de enkelte elementer i arrayet ved brug af eksempelvis foreach:

$row = print_r(random_row('YOUR_TABLE', 'YOUR_COLUMN'));
foreach( $row as $field) {
    echo $field;
}


Jeg går ud fra, at det er i den retning du tænker. Jeg vil dog stadig anbefale dig at bruge mysql_fetch_assoc, da det i denne sammenhæng er nemmere at arbejde med.
07. marts 2012 - 10:27 #3
Lad mig lige prøve at forstå hvad formålet med koden er, hvad det er du laver.  Så vidt jeg kan se, så vil du have en enkelt række trukket ud af en tabel, og denne række får du udskrevet med print_r(random_row('YOUR_TABLE', 'YOUR_COLUMN'));  Hvis du trak mere end en enkelt række ud af tabellen, så kunne du bruge en while løkke til at vise alle rækkerne, men for en enkelt række behøver du ingen while løkke.

Men har jeg misforstået formålet med koden?  Den ser lidt mystisk ud.  Først trækker du en række ud hvor værdien i $column er større end $randum_nummer og placerer den i variabelen $random_row, og derefter trækker du en anden række ud hvor værdien i $column er mindre end $random_number og den placerer du også i $randum_row og overskriver dermed den række du først udtrak, således at der stadig kun står en enkelt række i $random_row, og denne række skriver du ud.

Er det således at du ville have flere end en række trukket ud af tabellen?  I så fald er det ikke while-løkke du skal starte med, men starte med at gøre dig klart hvad du vil have og skrive sql querien derefter.

Fortæl.
09. marts 2012 - 19:47 #4
MartinJakobsen, fik du disse indlæg?  Hvis spørgsmålet stadig er aktuelt, så kom ind og fortæl.  Hvis spørgsmålet ikke længere er aktuelt (for eksempel fordi du selv fandt en løsning) så luk det venligst igen.
Avatar billede MartinJakobsen Nybegynder
11. juni 2012 - 00:24 #5
Tak for hjælpen :) Lukket
Avatar billede MartinJakobsen Nybegynder
11. juni 2012 - 00:24 #6
Tak for hjælpen :) Lukket
11. juni 2012 - 06:10 #7
Hvis det var til hjælp, skulle du så ikke have bedt om svar og afgivet de udlovede points?
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