Avatar billede repox Seniormester
11. december 2000 - 20:20 Der er 6 kommentarer og
1 løsning

random forbundet med mysql

Jeg prøver at lave en ting der kan finde en random adresse fra en af mine tables i MySsql databasen og derefter sætte det ind i en anden table!

Anvendte tables og felter :
TABLE konkurrence
id, navn, gade, postnr

TABLE vinder
navn, gade, postnr

Jeg synes da at det ser meget rigtigt ud, men jeg synes ikke det virker!

Jeg bruger scriptet herunder:

$query = mysql_query (\"SELECT * FROM konkurrence\");
$antal_deltagere = mysql_num_rows($query);

$random_deltager = rand(0,$antal_deltagere);

$query = mysql_query(\"SELECT * FROM konkurrence WHERE id=\'$id\'\");

$deltager_navn = mysql_result($query,0,\"navn\");
$deltager_gade = mysql_result($query,0,\"gade\");
$deltager_postnr = mysql_result($query,0,\"postnr\");


mysql_query(\"INSERT INTO vinder VALUES (\'$deltager_navn\',\'$deltager_gade\',\'$deltager_postnr\')\");

****

Hvad er det jeg gør galt ?

//Shady
Avatar billede andreas Nybegynder
11. december 2000 - 20:22 #1
du mangler srand()

tjek manualen for hjælp om den...
Avatar billede repox Seniormester
11. december 2000 - 20:34 #2
Jaehh... *hehe* Skal den bare sættes et tilfældigt sted ?

Jeg får også de her fejl når scriptet kører :


Warning: Unable to jump to row 0 on MySQL result index 3 in /blah/blah/www.blah.dk/kon_admin.php on line 24

Warning: Unable to jump to row 0 on MySQL result index 3 in /blah/blah/www.blah.dk/kon_admin.php on line 25

Warning: Unable to jump to row 0 on MySQL result index 3 in /blah/blah/www.blah.dk/kon_admin.php on line 26
Avatar billede jd Nybegynder
11. december 2000 - 21:15 #3
Du skal have \"srand ((double) microtime() * 1000000);\" lige over $random_deltager...

Men din kræver jo mange ressourcer, da du først henter alt indhold fra tabellen ud, og derefter vælger en tilfældig...
Hvorfor ikke bare

select *,((id*0)+rand()) as random from din_tabel order by random limit 1

?

Eller hvis du benytter den nyeste version af mysql

select * from din_tabel order by rand() limit 0,1

/Jon@z
Avatar billede repox Seniormester
12. december 2000 - 09:22 #4
Jonaz

Jeg har kigget på dit svar, men jeg synes ikke jeg fik noget ud af det... Jeg skrev :

$query = mysql_query (\"select *,((id*0)+rand()) as random from konkurrence order by random limit 1\");
$antal_deltagere = mysql_num_rows($query);


$query = mysql_query(\"SELECT * FROM konkurrence WHERE id=\'$id\'\");

$deltager_navn = mysql_result($query,0,\"navn\");
$deltager_gade = mysql_result($query,0,\"gade\");
$deltager_postnr = mysql_result($query,0,\"postnr\");




mysql_query(\"INSERT INTO vinder VALUES (\'$deltager_navn\',\'$deltager_gade\',\'$deltager_postnr\')\");


men det virkede ikke...

//Shady
Avatar billede jd Nybegynder
12. december 2000 - 16:55 #5
Det query jeg postede, er såmænd meget smartere...
Det kan gøres så let::

$query = mysql_query (\"select *,((id*0)+rand()) as random from konkurrence order by random limit 1\");
//$antal_deltagere = mysql_num_rows($query);

$deltager_navn = mysql_result($query,0,\"navn\");
$deltager_gade = mysql_result($query,0,\"gade\");
$deltager_postnr = mysql_result($query,0,\"postnr\");

mysql_query(\"INSERT INTO vinder VALUES (\'$deltager_navn\',\'$deltager_gade\',\'$deltager_postnr\')\");

Jeg har udkommenteret $antal_deltagere, da den ikke vil indeholde antallet af deltagere... Hvis du skal bruge antal af deltagere til noget, skriv da lige igen...

/Jon@z
Avatar billede repox Seniormester
12. december 2000 - 18:58 #6
Jonaz

Mange tak for dit svar, nu virker det sørme! :)

//Shady
Avatar billede jd Nybegynder
12. december 2000 - 21:18 #7
np
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