Toon posts:

[mysql] select random limit 10

Pagina: 1
Acties:
  • 100 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hoi Hoi,

Aangezien de search van parse nog niet werkt (of hij vind gewoon slecht)
en de mysql site niet echt duidelijk is over randoms, hier toch maar de vraag.

Ik heb een database met daarin profielen van gebruikers, hieruit wil ik een random pakken uit de 10 meest bekeken profielen.
met:
code:
1
select * from profiles order by rand() limit 1;

krijg ik een random en met:
code:
1
select * from profiles order by profile_views desc limit 10;

krijg ik de 10 meest bekeken profielen.
Maar ik kan deze 2 niet in 1 query krijgen.. :( Is dit mogelijk enzoja, een hint is altijd welkom :)

bdw. Het is voor een php site en ik kan het wel voor elkaar krijgen met 2 queries, maar dat was niet mijn bedoeling

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

"Order by profile_views, rand() limit 10" en dan alleen de eerste resultaat weer geven.

Tja mysql he.. >:)

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Verwijderd

Topicstarter
sorry dusty, maar deze functie werkt niet :(

hij geeft dan die 10 minst bekeken profielen gesorteerd ascending weer .

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Je kan als truukje je aantal keren bekeken met 10 vermenigvuldigen, en er dan rand() tussen 0 en 9 bij optellen, en daarop orderen.

SELECT (10*nr_views)+rand(0,9) AS pseudo_views FROM profiles ORDER BY pseudo_views DESC LIMIT 0,10

edit:
hmm ik vraag me ineens af of dit wel werkt...naja, probeer het zou ik zeggen...


edit:

Dit werkt dus voor geen meter haha, Hmm ik ben niet aan de drugs nee...

Hmm vraag me af of er met dit idee iets te beginnen is....denk denk

Waarom zijn er ook niet gewoon subqueries...

Verwijderd

Topicstarter
hehe, was net aan het sjekken..
en idd een subquery zou makkelijk zijn.

Verwijderd

Topicstarter
heb al een beetje een oplossing, maar nog niet helemaal wat ik wil.
mischien handig voor anderen die niet zo pietlutterig zijn als mij :D
PHP:
1
2
$rand = rand(1,10)
"select * from profiles order by profile_views desc limit ".$rand.",1";


Als iemand nog wat mooiers weet plz let me know :)

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

dusty schreef op 02 augustus 2002 @ 20:34:
"Order by profile_views, rand() limit 10" en dan alleen de eerste resultaat weer geven.

Tja mysql he.. >:)
Hij wil de 10 meest bezochte profielen. En er daar dan eentje random uit. Wat wil je dan in hemelsnaam hiermee? :)

Haal gewoon de tien meest bezochte op en haal er met PHP random eentje uit. In 1 query gaat met MySQL niet lukken.

Mochten de records van en user erg groot zijn (lijkt me sterk, maar ok), dan kan het efficienter zijn eerst de id's op te halen van de 10 meest bezochte users en vervolgens pas van 1 random de rest.

  • ToAoM
  • Registratie: Februari 2001
  • Laatst online: 30-03 14:28
waarom doe je net

SELECT profiles.*, rand() AS rndV FROM profiles ORDER BY rndV, profiles_view DESC

Verwijderd

Kan dit niet toevallig?

PHP:
1
2
3
4
5
6
7
8
9
10
11
select * 
   from 
      profiles 
   where 
      profile_id in (select profile_id  
                             from 
                                profiles 
                             order by 
                                profile_views 
                             desc limit 10) 
   order by rand() limit 1;


succes!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Das een goeie, maar subselects werken niet in MySQL.

  • Prutser_IA
  • Registratie: Januari 2000
  • Laatst online: 03-06-2021

Prutser_IA

<*{{{><

Die subselect is het mooist, maar gaat idd niet werken in MySQL,
Ik denk dat de beste oplossing voor dit probleem al gegeven is..
Gewoon kwestie van die top 10 uit de DB halen, en daar één profiel uit selecteren
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
Function GetProfile() { /* Geeft een Array terug */
    $rand = (1, 10);
    $sql = "select profile_id from profiles order by profile_views desc limit 10"
    $Get_ID = mysql_fetch_array(mysql_query($sql));
    $sql = "select * from profiles where profile_id='". $Get_ID[$rand] ."''";
    $items = mysql_query($sql);
    
    IF ($item = mysql_fetch_array($items)) return $item;
    ELSE return GetProfile();
}

$profile = GetProfile();

En volgens mij heb je zo je random profile uit de 10 meest bezochte..

42


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Devinity schreef op 02 augustus 2002 @ 20:55:
sorry dusty, maar deze functie werkt niet :(

hij geeft dan die 10 minst bekeken profielen gesorteerd ascending weer .
Desc erbij dus.

Maar klopt, zat even met een andere exotische database in mijn hoofd.

zoals hierboven gezegd, limit 10 pakken en dan daar via PHP (als je php gebruikt) er een willekeurig uit pakken.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Verwijderd

Topicstarter
Ja, ik heb het nu zo opgelost: Devinity in [mysql] select random limit 10
of zie hierboven :)
maar ik vroeg me af of dit ook geheel met mysql gedaan kon worden, gebruik nu namenlijk de random functie van php...
Pagina: 1