/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
order by rand() problemer
Fra : HLH


Dato : 12-06-03 04:16

Jeg ønsker at vælge 3 tilfældige poster fra min database. Der er imidlertid
nogle poster, som jeg ikke ønsker bliver valgt. Jeg bruger:

$result = mysql_query("select * from database where id!='5' AND id!='15' AND
id!='27' AND id!='62'order by rand() limit 3");

Problemet er, at posten med id=1 bliver valgt i 80-90% af tilfældene og
posten med id=2 bliver valgt i 60-70% af søgningerne. Det virker ikke
særligt tilfældigt - hvorfor?

Det forekommer mig, at søgningerne bliver mere tilfældige, hvis jeg
udelader - id!='5' AND id!='15' AND id!='27' AND id!='62' - er der en bedre
måde at gøre det på?

Jeg har ca. 70 poster i databasen, hvis det har nogen betydning.

mvh

Heini L. Hansen
www.netsundhedsplejerske.dk



 
 
Kasper Birch Olsen (13-06-2003)
Kommentar
Fra : Kasper Birch Olsen


Dato : 13-06-03 16:06

HLH wrote:
> Jeg ønsker at vælge 3 tilfældige poster fra min database. Der er imidlertid
> nogle poster, som jeg ikke ønsker bliver valgt. Jeg bruger:
>
> $result = mysql_query("select * from database where id!='5' AND id!='15' AND
> id!='27' AND id!='62'order by rand() limit 3");
>
> Problemet er, at posten med id=1 bliver valgt i 80-90% af tilfældene og
> posten med id=2 bliver valgt i 60-70% af søgningerne. Det virker ikke
> særligt tilfældigt - hvorfor?

altså får du 1 eller 2 i mellem 140% og 160% af tilfældene????

>
> Det forekommer mig, at søgningerne bliver mere tilfældige, hvis jeg
> udelader - id!='5' AND id!='15' AND id!='27' AND id!='62' - er der en bedre
> måde at gøre det på?

Jeg ved faktisk ikke hvorofor problemet opstår, men du kan jo hente alt
og fjerne resultaterne med php hvis de ikke mathcher. Det er godt nok
syntombehandling, men hvad pokker, det kan jo ikke være lige pænt hver gang.

> Jeg har ca. 70 poster i databasen, hvis det har nogen betydning.
>
> mvh
>
> Heini L. Hansen
> www.netsundhedsplejerske.dk
>
>


HLH (13-06-2003)
Kommentar
Fra : HLH


Dato : 13-06-03 17:33

> > $result = mysql_query("select * from database where id!='5' AND id!='15'
AND
> > id!='27' AND id!='62'order by rand() limit 3");
> >
> > Problemet er, at posten med id=1 bliver valgt i 80-90% af tilfældene og
> > posten med id=2 bliver valgt i 60-70% af søgningerne. Det virker ikke
> > særligt tilfældigt - hvorfor?
>
> altså får du 1 eller 2 i mellem 140% og 160% af tilfældene????

Nej, bemærk at jeg får 3 poster hver gang!

I 80-90% tilfældene er id=1 1 af de de 3 og i 60-70% af tilfældende er id=2
1 af de 3. Dvs. i op mod halvdelen af tilfældene er id=1 og id=2 i blandt de
3 poster...

Heini



HLH (14-06-2003)
Kommentar
Fra : HLH


Dato : 14-06-03 14:15

Jeg er kommet frem til at en mulig 'work-around' kan være at vælge posterne
1, 4 og 5 efter de er blevet sorteret tilfældigt med order by rand(), men er
der nogen der ved, hvordan jeg gør det?

Hvad skal jeg tilføje efter:

$result = mysql_query("select * from database where id!='5' AND id!='15' AND
id!='27' AND id!='62'order by rand() limit 3");

print "$row[overskrift]";

For at udskrive $row[overskrift] for posterne 1,4 og 5?

/Heini L. Hansen



Martin Sveegaard (14-06-2003)
Kommentar
Fra : Martin Sveegaard


Dato : 14-06-03 16:08

On Sat, 14 Jun 2003 15:14:52 +0200, "HLH" <hlh@jubiipostREMOVE.dk>
wrote:

>Hvad skal jeg tilføje efter:
>
>$result = mysql_query("select * from database where id!='5' AND id!='15' AND
>id!='27' AND id!='62'order by rand() limit 3");

while ($row = mysql_fetch_array($result)) {
print $row[overskrift];
}

>For at udskrive $row[overskrift] for posterne 1,4 og 5?
>
>/Heini L. Hansen
>
men ellers synes jeg du skulle tage og kigge på mt_rand(), den skulle
give en meget beget rand funktion.
MVH Martin S

Søg
Reklame
Statistik
Spørgsmål : 177519
Tips : 31968
Nyheder : 719565
Indlæg : 6408648
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste