Avatar billede illmatic Nybegynder
23. maj 2003 - 00:53 Der er 27 kommentarer

tilfældig tekst ud fra tabel?!

Hej allesammen

Lad os sige jeg har en tabel der hedder: tekst og rækkerne: id, tekst

Og hvis jeg gerne vil have den til hive en tilfældig tekst ud hvad gør jeg så?

mvh ill-M
Avatar billede illmatic Nybegynder
23. maj 2003 - 01:16 #1
Hvis jeg bruger:

<?
$rand = rand(0,100);
echo"$rand";
?>

Så viser den et tilfældigt tal mellem 1 og 100. Men hvorda gør jeg sådan at de tilfældige ting den henter skal hentes fra min mysql ?!
Avatar billede tipsen Nybegynder
23. maj 2003 - 01:17 #2
SELECT tekst FROM tekst ORDER BY RAND(NOW()) LIMIT 0,1;
Avatar billede illmatic Nybegynder
23. maj 2003 - 01:19 #3
ok men hvad mener du med (NOW()) ?
Avatar billede illmatic Nybegynder
23. maj 2003 - 01:23 #4
Det virker ikke ! :(
Skal jeg ik også skrive noget echo ""; ?
Avatar billede tipsen Nybegynder
23. maj 2003 - 01:23 #5
Det er fordi RAND-funktionen fra MySQL v. 3.23.52 skal seedes for at give "ordentlige" tilfældige tal og det kan man bl.a. gøre med NOW() - til professionel brug er de tilfældige tal dog slet ikke "gode nok", men ganske brugbare til de fleste formål.
Avatar billede illmatic Nybegynder
23. maj 2003 - 01:24 #6
Hmm ok... Det lyder jo ret godt ;)
Men det virker ik :(
Den viser ikke noget selv om jeg har sat noget i min tabel !
Avatar billede tipsen Nybegynder
23. maj 2003 - 01:27 #7
Hvad har du skrevet - vis din kode!
Avatar billede illmatic Nybegynder
23. maj 2003 - 01:29 #8
<?

mysql_query("SELECT * FROM emner ORDER BY RAND(NOW()) LIMIT 0,1");
echo "$emne";

?>

Skal have dem skrevet ud som tilfældige "emner" og i tabellen emner er der: id, emne
Avatar billede tipsen Nybegynder
23. maj 2003 - 01:34 #9
<?php

//lav forespørgsel og vis evt. fejl
$res = mysql_query("SELECT id, emne FROM emner ORDER BY RAND(NOW()) LIMIT 0,1") or die(mysql_error());
//hvis der var resultater (poster) i forespørgslen
if(mysql_num_rows($res) > 0) {
  list($id, $emne) = mysql_fetch_row($res)
  echo "$id - $emne<br>\n";
} else {
  echo "ingen poster";
}

?>
Avatar billede illmatic Nybegynder
23. maj 2003 - 01:37 #10
den viser fejl på linje 7 :( der hvor der står: echo "$id - $emne<br>\n";
ved ikke helt hvorfor !
Avatar billede illmatic Nybegynder
23. maj 2003 - 01:38 #11
Er der ikke et eller andet galt her?
Hvorfor stå der "list" forand ?

list($id, $emne) = mysql_fetch_row($res)
Avatar billede tipsen Nybegynder
23. maj 2003 - 01:48 #12
Der skal bare afsluttes med et ;
Avatar billede illmatic Nybegynder
23. maj 2003 - 01:50 #13
Hvor skal der det henne?
Har kigget koden igennem 37 gange og kan stadigvæk ikke finde nogen fejl :(
Avatar billede illmatic Nybegynder
23. maj 2003 - 01:51 #14
ok jeg satte en ; bag på: list($id, $emne) = mysql_fetch_row($res)
Men nu viser den bare nummer 1 i tabellen... selvom der er 2 !
Avatar billede martinbk Nybegynder
23. maj 2003 - 01:53 #15
til sidst når han siger afsluttes
list($id, $emne) = mysql_fetch_row($res); <-- DEN DER
Avatar billede martinbk Nybegynder
23. maj 2003 - 01:54 #16
altså med 2 emner i din tabel giver det jo entlig kun rand funktionen 2 mugligheder for at vælge tilfældigt..
Avatar billede illmatic Nybegynder
23. maj 2003 - 01:55 #17
øhh.. når jeg ændrer:
LIMIT 0,1
til
LIMIT 1,1

så viser den emne med ID 2 istedet for ID 1?
giver ingen mening :D

Holybull kan du give en færdig kode der virker? for jeg er fuldkommen lost !
Avatar billede martinbk Nybegynder
23. maj 2003 - 01:56 #18
tipsens kode er GANSKE udemærket... som sagt bare sæt nogle flere poster ind i din tabel og voila
Avatar billede illmatic Nybegynder
23. maj 2003 - 01:56 #19
det har jeg gjort.. har sat 5 ind nu og prøver at trykke opdater på siden, men det virker ik :(
Avatar billede martinbk Nybegynder
23. maj 2003 - 01:58 #20
prøv at ændre list($id, $emne) = mysql_fetch_row($res);
til list($id, $emne) = mysql_fetch_array($res);
Avatar billede martinbk Nybegynder
23. maj 2003 - 01:58 #21
anyways jeg vil gå i seng nu.. er sq for træt til sådan noget her
Avatar billede illmatic Nybegynder
23. maj 2003 - 01:58 #22
Gjorde ikke nogen forskel :(
Avatar billede illmatic Nybegynder
23. maj 2003 - 01:59 #23
holybull >>
Sov godt !
Avatar billede tipsen Nybegynder
23. maj 2003 - 02:41 #24
holybull: Ændringen fra fetch_row() til fetch_array gør bare koden langsommere og ikke andet i dette tilfælde.
Avatar billede tipsen Nybegynder
23. maj 2003 - 02:46 #25
Der er åbenbart nogle issues med brug af RAND i MySQL - der har været mange spørgsmål om det emne på det sidste. Prøv i stedet følgende lille hack jeg har lavet:

$res = mysql_query('SELECT COUNT(*) FROM emner') or die(mysql_error());
$antal = mysql_result($res,0);
mysql_free_result($res);
if ($antal > 0) {
  $rndnum = mt_rand(0, $antal-1);
  $res = mysql_query("SELECT id, emne FROM emner LIMIT $rndnum, 1") or die(mysql_error());
  list($id, $emne) = mysql_fetch_row($res);
  echo "$id - $emne<br>\n";
} else {
  echo "ingen poster";
}
Avatar billede tipsen Nybegynder
23. maj 2003 - 09:30 #26
...Hvad er der lige sket med ovenstående løsning fra mig!?
Avatar billede tipsen Nybegynder
23. maj 2003 - 09:33 #27
fedt nok!

holybull: At bruge fetch_array() i stedet for fetch_row() gør bare koden langsommere og ikke andet i dette tilfælde!

Her er en alternativ løsning, da RAND() i MySQL virker lidt smådefekt - spørgsmålet har været stillet mange gange det sidste stykke tid!

$res = mysql_query('SELECT COUNT(*) FROM emner') or die(mysql_error());
$antal = mysql_result($res,0);
mysql_free_result($res);
if ($antal > 0) {
  $rndnum = mt_rand(0, $antal-1);
  $res = mysql_query("SELECT id, emne FROM emner LIMIT $rndnum, 1") or die(mysql_error());
  list($id, $emne) = mysql_fetch_row($res)
  echo "$id - $emne<br>\n";
} else {
  echo 'Ingen poster fundet!';
}
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