Avatar billede xited Praktikant
13. april 2003 - 23:25 Der er 23 kommentarer og
1 løsning

Vælg Rand() fra MySQL

hvorfor virker det her ikke ???

Den vælger bare den første række i MySQL...

<?
$banner = mysql_query("select * from bannere where hits != '0' order by rand()");
$banner = mysql_fetch_array($banner);
$bruger = mysql_query("select * from bruger where navn='$banner[bruger]'");
$bruger = mysql_fetch_array($bruger);
if(substr($banner[url], 0,8) == "<script>") {
    echo "$banner[url]";
} else {
    echo "<a href=\"banner.php?id=$banner[id]&url=$bruger[url]\" target=\"_blank\"><img border=\"0\" src='http://$banner[url]\" width=\"125\" height=\"125\"></a>";
}
}
?>
Avatar billede Slettet bruger
13. april 2003 - 23:46 #1
Brug!

$banner = mysql_query("select *, rand() as random from bannere where hits != '0' order by random");

Du kan sikkert se logikken!?
Avatar billede xited Praktikant
13. april 2003 - 23:51 #2
det virker ikke...
Avatar billede Slettet bruger
13. april 2003 - 23:54 #3
Det burde det... test sql-kaldet i PHPMyAdmin...
Avatar billede xited Praktikant
13. april 2003 - 23:57 #4
Hvordan gøres det ??
Avatar billede Slettet bruger
13. april 2003 - 23:59 #5
Går naturligvis ud fra at du har installeret PHPMyAdmin på din server!?
Et eller andet sted kan du sikkert finde en textbox med overskriften:
"Kør SQL forspørgsel(er) på database dabasensnavn"
Avatar billede xited Praktikant
14. april 2003 - 00:04 #6
hvad skal jeg så gøre når jeg har fundet det ???
Avatar billede Slettet bruger
14. april 2003 - 00:05 #7
indsætte:
select *, rand() as random from bannere where hits != '0' order by random

og tryk på [foretag sql kald]
Avatar billede xited Praktikant
14. april 2003 - 00:15 #8
6 = 0.0221022078973262
7 = 0.694812973677007
3 = 0.805232698847756

Noget du kan bruge ???
Avatar billede Slettet bruger
14. april 2003 - 00:17 #9
Tjah... id=6 går jeg ud fra ikke er den første række i bannere!?
Ergo er min kode ikke problemet!?
DET så du må have gjort noget andet for at det ikke virker!?
Avatar billede xited Praktikant
14. april 2003 - 00:20 #10
det virker men jeg har lavet en statistik lige "hurtigt" opdateret den 50 gange som gav følgende resultat:

3: 45 visninger
6  2 visninger
7  3 visninger

Det er jo ikke brugeligt...
Avatar billede xited Praktikant
14. april 2003 - 00:21 #11
btw: hvad betyder de tal den gav i outputtet ???
Avatar billede Slettet bruger
14. april 2003 - 00:24 #12
6 = 0.0221022078973262
7 = 0.694812973677007
3 = 0.805232698847756

Kommatallene bagved 6,7 og 3 er tilfældigt genererede tal mellem 0 og 1 som mysql databasen laver!

Derefter sorterer mysql dit output efter kommatallene (random)
Avatar billede xited Praktikant
14. april 2003 - 00:32 #13
Lavede lige statistikken færdig og det ser ikke lovende ud:

3: 90 %
6:  2 %
7:  8 %
Avatar billede Slettet bruger
14. april 2003 - 00:39 #14
OK det virker meget underligt og usandsynligt...
Men så bør du nok ikke bruge mysql til det!
Avatar billede xited Praktikant
14. april 2003 - 00:40 #15
Hvad skal jeg så bruge ???
Avatar billede Slettet bruger
14. april 2003 - 00:43 #16
F.eks
$banner = mysql_query("select * from bannere where hits != '0'");
$rows = mysql_num_rows($banner);
$random = (int)rand(0,($rows-1));
mysql_data_seek($banner,$random);
$banner = mysql_fetch_array($banner);
Avatar billede Slettet bruger
14. april 2003 - 00:44 #17
Men reset din statestik og test det en gang til!
Avatar billede olebole Juniormester
14. april 2003 - 00:55 #18
<ole>

Prøv denne her:

$banner = mysql_query("select *, md5(rand()) as r from bannere where hits != '0' order by r limit 0, 1");

/mvh
</bole>
Avatar billede olebole Juniormester
14. april 2003 - 00:56 #19
Eller en lille beskidt én, introduceret af LJWeb:
$banner = mysql_query("select *, right(rand(), 4) as r from bannere where hits != '0' order by r limit 0, 1");
Avatar billede _darkstar_ Nybegynder
14. april 2003 - 01:01 #20
Fra manualen til Mysql:

"You can't use a column with RAND() values in an ORDER BY clause, because ORDER BY would evaluate the column multiple times. From version 3.23 you can do: SELECT * FROM table_name ORDER BY RAND() This is useful to get a random sample of a set SELECT * FROM table1,table2 WHERE a=b AND c<d ORDER BY RAND() LIMIT 1000."

http://www.mysql.com/doc/en/Mathematical_functions.html

Se også en alternativ metode på http://www.eksperten.dk/spm/334429, som med sikkerhed ikke henter mere end een række.
Avatar billede _darkstar_ Nybegynder
14. april 2003 - 01:01 #21
"henter" => "kigger på".
Avatar billede xited Praktikant
14. april 2003 - 01:19 #22
Tak for hjælpen allesammen

Hvis i føler jer berettiget til point, så tror jeg godt i kan rive lidt ud af regin... men han var trodsalt hurtigst, og det er hans forslag jeg har brugt...
Avatar billede Slettet bruger
14. april 2003 - 01:22 #23
Jeg lærte sq oz lidt der!
http://www.eksperten.dk/spm/340266
Avatar billede olebole Juniormester
14. april 2003 - 12:19 #24
Jeg har ingen problemer med, regin fik dem  :)
/mvh
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