Avatar billede hoell Nybegynder
28. marts 2005 - 20:49 Der er 18 kommentarer og
1 løsning

random udtræk fra tabel

Hejsa

Er lidt blank på hvordan jeg lavet et random udtræk fra min MySQL database. Til hver post i databasen er der en del felter, haraf fem felter, lad os kalde dem felt5, felt6, felt7, felt8 og felt9.

Altså udtrække vilkårligt blandt disse fem felter, samtidigt med det er vilkårligt på psterne i tabellen.

Nogen der har nogle gode ideer?

/Carsten
Avatar billede baitianlong Nybegynder
28. marts 2005 - 20:51 #1
har du et unikt felt på hver post, f.eks id eller nummer ?
Avatar billede hoell Nybegynder
28. marts 2005 - 20:52 #2
Ja der er et unikt felt på hver post f.eks ID
Avatar billede bromer Nybegynder
28. marts 2005 - 20:54 #3
du kan finde antallet af rækker i din tabel og så finde hvilken række du vil have med

$nr = rand(0,$max-1);

på samme måde kan du vælge melelm felterne
$felter = array("felt5","felt6","felt7","felt8","felt9");
$felt = $felter[rand(0,count($felter)-1)];

så har du din værdi med en query som:

$sql = sprintf("select %s FROM tabel ORDER by something LIMIT 1 OFFSET %d",$felt,$nr);
Avatar billede hoell Nybegynder
28. marts 2005 - 20:55 #4
Hej Du kan vente med at svare, da jeg stopper for idag.
Avatar billede baitianlong Nybegynder
28. marts 2005 - 20:59 #5
<?php
$ider = array();
$result = mysql_query("SELECT id FROM tabel");
while($row = mysql_fetch_assoc($result)) {
  array_push($ider, $row['id']);
}
shuffle($ider);
$tempid = $ider[0];
$felter = array("felt5", "felt6", "felt7", "felt8", "felt9");
shuffle($felter);
$tempfelt = $felter[0];
$result2 = mysql_query("SELECT $tempfelt FROM tabel WHERE id=$tempid");
$row2 = mysql_fetch_row($result2);
print($row2[0]);
?>

Prøv med det :)
Avatar billede detox Nybegynder
28. marts 2005 - 21:32 #6
Du kan osse benytte dig af MySQL funktionen RAND():

$res = mysql_query("SELECT * FROM tabel ORDER BY RAND() LIMIT 1");
$felter = array("felt5","felt6","felt7","felt8","felt9");
$felt = $felter[rand(0,count($felter)-1)];
echo mysql_result($res, 0 , $felt);
Avatar billede hoell Nybegynder
28. marts 2005 - 23:30 #7
Og hvad hvis et af felterne er tomme (for kan det være i nogletilfælde). Så skal den jo ikke vælge dette felt?

Jeg har ikke testet nogen af ovenstående endnu, sker tirsdag aften efter hockeykampen.

/Carsten
Avatar billede bromer Nybegynder
28. marts 2005 - 23:59 #8
nu tilpasser jeg lige detox's kode fordi han lavede den bedste select :)

<?
do {
$res = mysql_query("SELECT * FROM tabel ORDER BY RAND() LIMIT 1");
$felter = array("felt5","felt6","felt7","felt8","felt9");
$felt = $felter[rand(0,count($felter)-1)];
$data = mysql_result($res, 0 , $felt);
} while(empty($data));

så ender du (hvis der er data i tabellen) med en værdi
Avatar billede barklund Nybegynder
29. marts 2005 - 11:17 #9
Du kan endda lave det hele i sql:

$random = mysql_result(mysql_query("SELECT CASE FLOOR(RAND()*5) WHEN 0 THEN felt5 WHEN 1 THEN felt6 WHEN 2 THEN felt7 WHEN 3 THEN felt8 ELSE felt9 END FROM tabel ORDER BY RAND() LIMIT 1"),0);

Hvis man synes det kunne være sjovt :)

--
Morten Barklund
Avatar billede hoell Nybegynder
29. marts 2005 - 16:36 #10
Bromer & detox, hvis i smider er svar så deler jeg p mellem jer.


-> Barklund Dette SQl skrift tager ikke højde for, hvis der er et tomt felt.

Mvh Carsten super mange tak for hjælpen.
Avatar billede bromer Nybegynder
29. marts 2005 - 16:41 #11
svar :)
Avatar billede barklund Nybegynder
29. marts 2005 - 16:41 #12
Det var jo også bare, hvis nu man fandt det sjovt - jeg fandt det meget sjovt.

Og derudover kan vi da godt tilføje, at den ikke vælger tomme felter - men så bliver det en lang sql-sætning :)
Avatar billede bromer Nybegynder
29. marts 2005 - 16:45 #13
do {
$random = mysql_result(mysql_query("SELECT CASE FLOOR(RAND()*5) WHEN 0 THEN felt5 WHEN 1 THEN felt6 WHEN 2 THEN felt7 WHEN 3 THEN felt8 ELSE felt9 END FROM tabel ORDER BY RAND() LIMIT 1"),0);
} while(empty($random));

er lige en hybrid :)
Avatar billede hoell Nybegynder
29. marts 2005 - 17:00 #14
Tjaa, men hvordan trækker jeg en række ID ud af den sidste, hvis dette felt hedder ID?
Avatar billede bromer Nybegynder
29. marts 2005 - 17:01 #15
du vælger vel også bare id og tilretter din mysql_result
Avatar billede barklund Nybegynder
29. marts 2005 - 17:02 #16
Noget i stil med:

do {
  $r = mysql_query("SELECT id, CASE FLOOR(RAND()*5) WHEN 0 THEN felt5 WHEN 1 THEN felt6 WHEN 2 THEN felt7 WHEN 3 THEN felt8 ELSE felt9 END AS random FROM tabel ORDER BY RAND() LIMIT 1")
  $random = mysql_result($r,0,'random');
  $id = mysql_result($r,0,'id');
} while(empty($random));

--
Morten Barklund
Avatar billede hoell Nybegynder
29. marts 2005 - 17:07 #17
Jeg er vel så nod til at skulle onkrin enmysql_fetch_row, da jeg ikke kan trække både ID og indholdet af et felt ud med mysql_select? eller hvodan ser det ud?
Dette kun af ren nysgerighed
Avatar billede bromer Nybegynder
29. marts 2005 - 17:09 #18
barklund har lige givet dig en løsning, hvor hans query er wrappet omkring den while jeg lavede til dig tidligere. Prøv med den.
Avatar billede hoell Nybegynder
29. marts 2005 - 17:16 #19
Ja sådan går det når man ikke lige får opdateret inden man stiller et nyt spm. Ja der kan jeg se at det selvfølgelig kan klares med mysql_selcet, have ikke lige tænkt på at lave det som lidt tidligere.

Bromer du får point, for jeg har benyttet dit forslag, så må vi se om Detox henvender sig og vil have nogle points
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