Avatar billede dennism Nybegynder
18. marts 2003 - 18:03 Der er 16 kommentarer og
1 løsning

Tilfældig mysql række...

Jeg bruger denne kode til af vælge en tilfældig række i min mysql database:

$mysql = mysql_query("SELECT id, script FROM banner ORDER BY RAND(".time().") LIMIT 1");

Jeg har bare et problem med den.. Jeg har nu kørt på min side i 14 dage, men nogle af bannerne er blevet vist 500 gange, mens andre slet ikke er blevet vist endnu...

Hvordan kan det være at den fungerer så dårligt?
Hvordan skal det se ud for at den virker?
Avatar billede dennism Nybegynder
18. marts 2003 - 18:04 #1
Tjek evt. her:
http://www.musikchart.dk
Avatar billede schaefner Juniormester
18. marts 2003 - 22:22 #2
Hvad hvis du bruger den her?
<?php
mysql_query("SELECT *,random() AS r FROM tabel ORDER BY r LIMIT 1 ");
?>

Giver den et "breddere" resultat?
Avatar billede andy Nybegynder
19. marts 2003 - 09:41 #3
Du behøver ikke at seede rand(). Brug bare:
$mysql = mysql_query("SELECT id, script FROM banner ORDER BY RAND() LIMIT 1");

Hvis dette ikke hjælper så bruger du sikkert MySQL .54 eller .55. Der er nemlig en bug i de to versioner mht rand().
Avatar billede dennism Nybegynder
19. marts 2003 - 17:14 #4
andy >>

På min webserver er der "mysql-3.23.54a-4"... Så det er altså derfor den ikke virker?
Er der andet jeg kan gøre, end at bede min hostmaster end at skifte til en nyere version?
Avatar billede andy Nybegynder
19. marts 2003 - 18:19 #5
Nej, faktisk ikke.
Avatar billede dennism Nybegynder
21. marts 2003 - 16:12 #6
Jeg får en fejl meddelse når jeg kører følgende:

$mysql = mysql_query("SELECT *, random() AS r FROM banner ORDER BY r LIMIT 1 ");
$row = mysql_fetch_array($mysql);

Fejlen er:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in D:\htdocs\site\musikchart\include\top.php on line 22

Hvorfor kommer den?
Avatar billede andy Nybegynder
22. marts 2003 - 01:47 #7
Du skal bruge:
$mysql = mysql_query("SELECT id, script FROM banner ORDER BY RAND() LIMIT 1");
Avatar billede dennism Nybegynder
22. marts 2003 - 09:33 #8
andy >>

Det er jo den der ikke virker på min webhotel!
Avatar billede andy Nybegynder
22. marts 2003 - 10:35 #9
Har du prøvet den? Selecter den samme række hele tiden?
Avatar billede dennism Nybegynder
22. marts 2003 - 13:37 #10
Denne kode ligger nu her:

http://www.musikchart.dk/

Men som du kan se så skifter den ikke banner ret tit!.. Det er mange gange det samme der bliver valgt!

Hvorfor?
Avatar billede andy Nybegynder
22. marts 2003 - 13:53 #11
pga MySQL .54.....
Avatar billede dennism Nybegynder
22. marts 2003 - 14:01 #12
Hvad kan jeg så gøre indtil en nyere version af MySQL bliver udgivet til min hostmasters OS?
Avatar billede andy Nybegynder
22. marts 2003 - 14:26 #13
Så skal du kaste hele din database ind i et array og udtrække en tilfældig med rand() i php.
Avatar billede dennism Nybegynder
22. marts 2003 - 14:30 #14
kan du forklare det mere præcist?
Avatar billede andy Nybegynder
22. marts 2003 - 14:46 #15
$banner_array = array();
$res = mysql_query("SELECT id, script FROM banner");
while($row = mysql_fetch_array($res)) {
$banner_array[] = "$row[0]|$row[1]";
}
(double)microtime()*1000000;
$rand = rand(0, sizeof($banner_array));
$banner_array = explode("|", $banner_array[$rand]);
// $banner_array[0] indeholder nu et ID og
// $banner_array[1] det tilhørende "script"
Avatar billede andy Nybegynder
22. marts 2003 - 14:50 #16
Dette eksempel fra php.net er dog en del bedre:

About selecting random rows from a MySQL table:

SELECT * FROM tablename ORDER BY RAND() LIMIT 1

works for small tables, but once the tables grow larger than 300,000 records or so this will be very slow because MySQL will have to process ALL the entries from the table, order them randomly and then return the first row of the ordered result, and this sorting takes long time. Instead you can do it like this (atleast if you have an auto_increment PK):

SELECT MIN(id), MAX(id) FROM tablename;

Fetch the result into $a

$id=rand($a[0],$a[1]);

SELECT * FROM tablename WHERE id>='$d' LIMIT 1
Avatar billede dennism Nybegynder
22. marts 2003 - 15:00 #17
Tak for hjælpen...
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
Computerworld tilbyder specialiserede kurser i database-management

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