rand() без повтаряне

oniq

Registered
Код:
$sql = mysql_query("SELECT * FROM sites ORDER BY rand()");

Правя си ротатор на реклама в сайта... но не искам да ми вади по 2-3 пъти един и същи сайт. Искам като презаредя да ми извади друго а не същото. То го вади но по някога при 2-3 рефреша...

Просто искам да показва друго... некакви идеи?
 
Може да пазиш в един масив в сесията показаните сайтове. Нещо такова:

if( empty($_SESSION['sites']) ) {
$_SESSION['sites'] = array();
$sql = mysql_query("SELECT * FROM sites ORDER BY rand() LIMIT 10");
} else {
$sql = mysql_query("SELECT * FROM sites WHERE site_id NOT IN(".join(",",$_SESSION['sites'] ).") ORDER BY rand() LIMIT 10");
}

и после в кода където ги показваш нещо такова :

while ( $site = mysql_fetch_xxxx(...) ){

echo $site['site_name'] . '<br />';

$_SESSION['sites'][] = $site['site_id'];

}
 
По леко и практично от 2 малки реда код, които трябва да добавиш към твоя ? Не знам :)
 
Мойто е ротатор, искам нещо компактно...

array_rand ли как бяха там... search.. нещо което ще олекоти скрипта. :lol:
 
Значи искаш да селектираш всички сайтове от базата, които може теоретично да се 2000 или пък 100 000. След това от тях да вземеш 5 или 10 рандъм сайта, тъй ли? Ами за какво са ти тогава останалите 1000, които ще изтеглиш от базата? Смяташ ли, че това е "практично" решение?
 
vaskoa каза:
Значи искаш да селектираш всички сайтове от базата, които може теоретично да се 2000 или пък 100 000. След това от тях да вземеш 5 или 10 рандъм сайта, тъй ли? Ами за какво са ти тогава останалите 1000, които ще изтеглиш от базата? Смяташ ли, че това е "практично" решение?
:)
$rand = rand(1,10);
... LIMIT $rand
:)
 
Код:
$sql = mysql_query("SELECT * FROM sites WHERE types='1' ORDER BY rand()");
$down = mysql_fetch_object($sql);

echo ' 
<a href="'.$down->site_url.'" target="_blank"><img src="'.$down->site_baner.'" border="0"></a>
';

Искам всеки път да показва различен банер. Тва е!
 
Ето, това е. Само смени site_id с уникалния ключ в таблицата, предполагам, че имаш такъв:

session_start();

if(empty($_SESSION['displayed_sites'])){
$_SESSION['displayed_sites'] = array();
}

if($_SESSION['displayed_sites']){
$sql = mysql_query("SELECT * FROM sites WHERE types='1' AND site_id NOT IN(".join(",",$_SESSION['displayed_sites']).") ORDER BY rand() LIMIT 1");
} else {
$sql = mysql_query("SELECT * FROM sites WHERE types='1' ORDER BY rand() LIMIT 1");
}

$link = '';
if(mysql_num_rows($sql)){
while ($down = mysql_fetch_object($sql)){
$_SESSION['displayed_sites'][] = $down->site_id;
$link = '<a href="'.$down->site_url.'" target="_blank"><img src="'.$down->site_baner.'" border="0"></a>';
}
} elseif($_SESSION['displayed_sites']){ // това ще се изпълни когато извърти всички сайтове в базата
$_SESSION['displayed_sites'] = array();
$sql = mysql_query("SELECT * FROM sites WHERE types='1' ORDER BY rand() LIMIT 1");
while ($down = mysql_fetch_object($sql)){
$_SESSION['displayed_sites'][] = $down->site_id;
$link = '<a href="'.$down->site_url.'" target="_blank"><img src="'.$down->site_baner.'" border="0"></a>';
}
}

echo $link;

може да се напише и малко по-елегантно, но като идея работи :)
 

Back
Горе