• 15 odgovora
  • 4.011 pregleda
array_rand() problem 15.01.2007. u 13:38 · pre 240 meseci #1
pozz, imam:

Code:
$igraci = "SELECT * FROM igraci_dodjela";
    $nextt = mysql_query($igraci);
    while($b=mysql_fetch_array($nextt)){
        
        $imeprezime[] = $b["ime_prezime"];
        $id_igraca = $b["id"];
        
    
        }    
    

$rand = array_rand($imeprezime, 5);
$smarty->assign('imeprezime', $imeprezime);

recimo da hocu da mi ispise samo 5 ovih imenaprezimena ..

zasto ne radi? ispise mi sve ...

Re: array_rand() problem 15.01.2007. u 13:59 · pre 240 meseci #2
Mislim da ce ti ovo pomoci...

Code:

// obrati paznju na LIMIT 5
$podaci = array();
$igraci = "SELECT kolona_ime, kolona_prezime FROM igraci_dodjela LIMIT 5";
$nextt = mysql_query($igraci);
    while(list($ime, $prezime) = mysql_fetch_array($nextt)){
         $podaci[] =  $ime . $prezime;
    }    
// kao rezultat dobijas niz
// $podaci[0] = 'Ime1 Prezime1' ... $podaci[4] = 'Ime5 Prezime5' ...

Jos jedna mala napomena, nema potrebe izvlaciti sve kolone ako ti nisu potrebne.
Re: array_rand() problem 15.01.2007. u 15:14 · pre 240 meseci #3
ja tu nigdje ne vidim array_rand() meni treba slucajnim odabirom 5, ne dolazi u obzir ORDER BY rand() ...
Re: array_rand() problem 15.01.2007. u 17:38 · pre 240 meseci #4
Ne dolazi u obzir to sto si ti napisao! Izvlacis ko zna koliko podataka iz baze da bi uzeo 5 slucajnih. Moras limit 5
Re: array_rand() problem 15.01.2007. u 17:59 · pre 240 meseci #5
$igraci = "SELECT * FROM igraci_dodjela LIMIT 5";
$nextt = mysql_query($igraci);
while($b=mysql_fetch_array($nextt)){

$imeprezime[] = $b["ime_prezime"];
$id_igraca = $b["id"];


}


$rand = array_rand($imeprezime, 5);
$smarty->assign('imeprezime', $imeprezime);

tako opet nece. ispise mi 5, ali nije random, vec ne znam ni ja kako mozda po redu .. ne znam kojim redoslijedom ali i kad idem refresh uvijek isto ostane. pozdrav.
Re: array_rand() problem 15.01.2007. u 18:21 · pre 240 meseci #6
Tek posto sam poslao post shvatio sam sta si ustvari hteo da pitas. Lepo si napisao u naslovu, ali posto nisam bio za kompom nisam stigao da se ispravim... Ono sto moram da kazem je to da nisam radio sa smarty-iem ali ono sto pada u uoci je sledece:

1. mozda si prevideo da je rezultat array_rand() niz ako biras vise od jednog elementa
"array_rand() is rather useful when you want to pick one or more random entries out of an array. It takes an input array and an optional argument num_req which specifies how many entries you want to pick - if not specified, it defaults to 1.

If you are picking only one entry, array_rand() returns the key for a random entry. Otherwise, it returns an array of keys for the random entries. This is done so that you can pick random keys as well as values out of the array."

2. tvoj kod nigde nekoristi $rand
Code:

$rand = array_rand($imeprezime, 5); 
// rezultat gornje linije je npr. $rand = (2,3,7,11,13) 
$smarty->assign('imeprezime', $imeprezime);
Re: array_rand() problem 15.01.2007. u 18:30 · pre 240 meseci #7
sad sam na osnovu onoga tvog posta gore napisao:
Code:
$podaci = array();
$igraci = "SELECT ime_prezime FROM igraci_dodjela LIMIT 5";
$nextt = mysql_query($igraci);
    while(list($a) = mysql_fetch_array($nextt)){
         $imeprezime[] =  $a["ime_prezime"];
    }    
    $array_rand = array_rand($imeprezime, 5);
ali ispisuje mi samo nekakve brojeve. imas li msn? ako imas posalji preko privatnih poruka pa tamo da se cujemo lakse je.

pozz.
Re: array_rand() problem 16.01.2007. u 11:57 · pre 240 meseci #8
Array_rand vraca indeks slucajnog clana niza u ovom slucaju
Re: array_rand() problem 16.01.2007. u 23:16 · pre 240 meseci #9
Mislim da će mu mysql_data_seek() odraditi posao.

Dakle, izvršiš upit bez "LIMIT",
očitaš sa mysql_num_rows koliko imaš redova,
napraviš niz sa 5 slučajnih brojeva u tom opsegu,
napravi foreach petlju s tim nizom i u petlji pozoveš mysql_data_seek($x) pre mysql_fetch_assoc.
Potpis
"The quieter you become, the more you are able to hear."
Blog | PowerCMS
Re: array_rand() problem 17.01.2007. u 07:28 · pre 240 meseci #10
hahahaha!!!

Pa kako to, majku mu, da se niko nije setio da SELECT query moze da ima i ORDER i LIMIT?!?! Order by rand() ce sortirati po slucajnom izboru, a limit ce uzeti prvih pet. I umesto da se izmislja topla voda i programira suvisno i ubija performansa aplikacije, to treba prepustiti bazi, koja za to i sluzi!

Dakle,:

Code:

$imena = array();
$query = "SELECT ime_prezime FROM igraci_dodjela ORDER BY RAND() LIMIT 0, 5";
$sql = mysql_query($query);
while ( $row = mysql_fetch_assoc($sql) ) {
     $imena[] =  $row['ime_prezime'];
}
$smarty->assign('imena', $imena);
Potpis
ZelenaLutrija.com - Saznajte sve o lutriji za zelenu kartu (doživotni boravak u Sjedinjenim Američkim Državama)
Re: array_rand() problem 17.01.2007. u 11:46 · pre 240 meseci #11
U pravu si,
mislio sam da će konstrukcija ORDER BY RAND() odabrati slučajnu kolonu po kojoj će sortirati (po meni logičnije),
ali sad sam proverio u manualu, takva konstrukcija stvarno razbaca redove (upravo isprobao).

Iz manuala:
As of MySQL 3.23, you can retrieve rows in random order like this:

mysql> SELECT * FROM tbl_name ORDER BY RAND();

ORDER BY RAND() combined with LIMIT is useful for selecting a random sample of a set of rows.
Potpis
"The quieter you become, the more you are able to hear."
Blog | PowerCMS
Re: array_rand() problem 17.01.2007. u 12:34 · pre 240 meseci #12
Citat:
hahahaha!!!

Pa kako to, majku mu, da se niko nije setio da SELECT query moze da ima i ORDER i LIMIT?!?! Order by rand() ce sortirati po slucajnom izboru, a limit ce uzeti prvih pet. I umesto da se izmislja topla voda i programira suvisno i ubija performansa aplikacije, to treba prepustiti bazi, koja za to i sluzi!


Sve je to ok, ali kada budem imao MNOGO više upisa, biće veoma sporo, u tome je problem.
Re: array_rand() problem 17.01.2007. u 12:53 · pre 240 meseci #13
Citat:
Sve je to ok, ali kada budem imao MNOGO više upisa, biće veoma sporo, u tome je problem.


Koliko je to mnogo i zasto mislis da ce biti sporo?
Potpis
Never trust an operating system you don't have sources for.
Re: array_rand() problem 17.01.2007. u 17:18 · pre 240 meseci #14
Nisi u pravu. Kako god da okrenes, bice ti brze da pustis MySQL server da ti odradi to kad vec ima optimizovane funkcije za to.

Bas u tome i jeste poenta, da kada budes imao nekoliko miliona redova u bazi, onda ce tvoj kod da povuce SVE, pa da protrci kroz SVE, pa da ti napravi jedan krmeci array koji ce ti pojede memoriju, samo da bi na kraju izvukao 5 slucajnih uzoraka.

Samo ti koristi ovo, i mirna Backa. Veruj mi na rec. ;-)
Potpis
ZelenaLutrija.com - Saznajte sve o lutriji za zelenu kartu (doživotni boravak u Sjedinjenim Američkim Državama)
Re: array_rand() problem 17.01.2007. u 17:57 · pre 240 meseci #15
Pa šta ja znam, par hiljada. Hvala vam momci, bude li dugo trajalo "oživjeti" ću ovaj thread i galamiti. :) Hvala još jednom, poz.

Re: array_rand() problem 17.01.2007. u 18:22 · pre 240 meseci #16
par hiljada ti je gotovo nista za bazu.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme