Avatar billede darkmoon Nybegynder
03. november 2000 - 11:30 Der er 26 kommentarer og
1 løsning

Random row i table

hejsa, vudden vælger jeg en random row fra en table ?

Avatar billede halnet Nybegynder
03. november 2000 - 11:32 #1
Har du et id felt? med tal?

- Anders
Avatar billede limemedia Nybegynder
03. november 2000 - 11:34 #2
Jeg bruger den her kommando i et random bannersystem

$BannerQuery = mysql_query(\"SELECT BannerID, Banner, URL, ((BannerID*0)+rand()) AS RandomID FROM $db_table WHERE (((UserID=\'$ID\')AND(Size=\'$Size\'))AND((CountDisplay < MaxDisplay)OR(MaxDisplay = -1))) ORDER BY RandomID LIMIT 0, 1\") or returnDefault(\"error\", $defaultBanner);
Avatar billede halnet Nybegynder
03. november 2000 - 11:34 #3
Hvis ja...

$sql = \"SELECT * FROM tabel\";
$res = mysql_db_query($db, \"$sql\");
$ant = mysql_num_rows($res);
for ( ; ; ) {
  srand((double)microtime() * 1000000);
  $randval = rand();
  $id = rand(1,$ant);
  $res = mysql_db_query($db, \"SELECT * FROM tabel WHERE id = \'$id\'\");
  $num = mysql_num_rows($res);
  if ($num > 0) {
    $row = mysql_fetch_array($res);
    $res = mysql_db_query($db, \"SELECT * FROM tabel WHERE url = \'$row[url]\'\");
    $num = mysql_num_rows($res);
    if ($num > 0) {
      $row = mysql_fetch_array($res);
      Header(\"Location: redir.php?url=$row[url]\");
      break;
    }
  }
}

- Anders
Avatar billede limemedia Nybegynder
03. november 2000 - 11:38 #4
Det jeg gør er at tage mit ID felt og ganger med nul... Det giver nul. Derefter ligger jeg et random tal til mellem 0 og 1... Sorter på dette random felt og begræns dit resultat med LIMIT til kun ét svar.
Avatar billede limemedia Nybegynder
03. november 2000 - 11:40 #5
halnet >> du bruger meget overhead ved flere databaseopslag... Prøv altid at begrænse dine opslag i databasen - en database er hurtigere til at processere end PHP nogensinde vil være.
Avatar billede limemedia Nybegynder
03. november 2000 - 11:42 #6
mysql_query(\"SELECT *, ((ID*0)+rand()) AS RandomID FROM $db_table ORDER BY RandomID LIMIT 0, 1\");

er kortet lidt ned og er nemmere at læse
Avatar billede halnet Nybegynder
03. november 2000 - 11:42 #7
-> ljweb
Det kan der være noget om...

- Anders
Avatar billede halnet Nybegynder
03. november 2000 - 11:46 #8
-> ljweb
Jeg har fjernet noget af where-sætningen og kortet koden af.
Jeg kan ikke gøre den kortere end den er i forvejen!

Men i mit eks. kunne den sagtens have været kortet mere af!!

- Anders
Avatar billede limemedia Nybegynder
03. november 2000 - 11:47 #9
uden brug af PHP og ren SQL :)

SELECT *, ((ID*0)+rand()) AS RandomID
FROM $db_table
ORDER BY RandomID
LIMIT 0, 1
Avatar billede halnet Nybegynder
03. november 2000 - 11:51 #10
-> ljweb
Mangler du ikke at definere din rand()??
Eller har jeg misforstået noget?

- Anders
Avatar billede limemedia Nybegynder
03. november 2000 - 11:52 #11
rand funktionen her er en SQL ting...
Avatar billede halnet Nybegynder
03. november 2000 - 11:56 #12
Det ved jeg godt!!

Citat:
\"Remember to seed the random number generator before use with srand().\"

- Anders
Avatar billede halnet Nybegynder
03. november 2000 - 11:57 #13
-> ljweb
SORRY... læste ikke din kommentar... så ved jeg lidt mere :o)

- Anders
Avatar billede limemedia Nybegynder
03. november 2000 - 11:57 #14
halnet >> fra mySQL manualen :

RAND()
RAND(N)
Returns a random floating-point value in the range 0 to 1.0. If an integer argument N is specified, it is used as the seed value:
mysql> select RAND();
        -> 0.5925
mysql> select RAND(20);
        -> 0.1811
mysql> select RAND(20);
        -> 0.1811
mysql> select RAND();
        -> 0.2079
mysql> select RAND();
        -> 0.7888

You can\'t use a column with RAND() values in an ORDER BY clause, because ORDER BY would evaluate the column multiple times. In MySQL Version 3.23, you can, however, 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. Note that a RAND() in a WHERE clause will be re-evaluated every time the WHERE is executed.
Avatar billede limemedia Nybegynder
03. november 2000 - 11:59 #15
hvis man læser det stykke burde man kunne revidere min SQL til

SELECT *
FROM tabel
ORDER BY RAND()
LIMIT 0,1

Kan det snart blive nemmere ??? sidste er dog utestet !!!
Avatar billede halnet Nybegynder
03. november 2000 - 12:02 #16
hehe... det gør jeg min kode lidt nemmere...

*Jeg bukker mig mod skærmen*

- Anders
Avatar billede limemedia Nybegynder
03. november 2000 - 12:02 #17
darkmoon ?
Avatar billede halnet Nybegynder
03. november 2000 - 12:09 #18
Min tidligere kode er blevet til:

dbConnect();
$sql = \"SELECT * FROM sog_info WHERE kat $type \'13%\' ORDER BY RAND() LIMIT 0,1\";
$res = mysql_db_query($db, $sql);
$row = mysql_fetch_array($res);
Header(\"Location: redir.php?url=$row[url]\");

Og det virker fino!!

- Anders
Avatar billede razor Nybegynder
03. november 2000 - 13:47 #19
select *,((id*0)+rand()) as random from tabel order by random limit 1
Avatar billede limemedia Nybegynder
03. november 2000 - 13:50 #20
razor >> ?? hvor er forskellen i dit eksempel fremfor min og Halnet\'s diskussion ???
Avatar billede razor Nybegynder
03. november 2000 - 14:32 #21
hov
Avatar billede limemedia Nybegynder
03. november 2000 - 20:46 #22
darkmoon ?

weird... du giver point som om du har ild et vist sted men kommenterer ikke nogen svar ?!? er du kommet videre eller ?
Avatar billede limemedia Nybegynder
07. november 2000 - 14:00 #23
ping  ?
Avatar billede lp Nybegynder
10. november 2000 - 20:41 #24
Ehhhmmm, bare lige en kommentar:
Hvis rand() giver problemer i MySQL......er det fordi denne funktion først er understøttet fra version 3.23...........
Version 3.22 er den seneste stable release og det er det de fleste produktionsmaskiner kører med.
Jeg har selv opdateret til version 3.23 på min udviklingsmaskine men det anbefaler man ikke til produktionsmaskiner.

/LP
Avatar billede jd Nybegynder
11. november 2000 - 21:29 #25
darkmoon?? Kan vi få en afslutning?
Avatar billede darkmoon Nybegynder
13. november 2000 - 14:15 #26
Sorry, jeg fik brugt ljweb\'s løsning med jeg kommer her ikke så tit ;) Nu skulle den være afsluttet :)
Avatar billede darkmoon Nybegynder
13. november 2000 - 14:16 #27
btw, så kom der et 0 for meget på da jeg skulle give points, men man kan desværre ikke trække fra ;)
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

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Nye kolleger søges til IT Stab i Forsvaret

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Teknisk systemansvarlig / ingeniør inden for taktisk datalink

AL Sydbank A/S (tidligere Arbejdernes Landsbank)

Afdelingschef til GDPR & Tech Regulation

Politiets Efterretningstjeneste

CNE-specialist til PET`s indhentningsafdeling