Risolto!
ho avuto un'idea un pò meccanica e fin troppo efficiente
ho aggiunto una tabella "id_rand" con valore 1 e 2 (predefinito 1) praticamente tinyint si/no; sotto la tabella user_id.
Nella "SELECT" ho aggiunto WHERE id_rand = 1
ad ogni estrazione porto il valore di id_rand per quell'user_id a 2, così non verrà nuovamente estratto.
Fin qui tutto funziona alla grande nessun duplicato al 100% (anzi posso anche fare a meno di 'order by rand' ).
Ma ovviamente appena avrò assegnato il valore 2 a tutti gli user_id , non verrà estratto più nulla (ecco perchè dicevo fin troppo efficiente
).
A questo punto decido di usare "order by user_id DESC limit 1;
Questo perchè non so quale sia l'ultimo id ma so che il primo è il numero 1
Quindi quando avrò raggiunto l'ultimo id riporterò tutte le tabelle id_rand a valore 1 (nuovamente disponibili) così:
Codice: Seleziona tutto
$req = mysqli_query($dbi, "UPDATE `phpbb_users` SET id_rand = 1 WHERE user_id > 1 AND '$id' = 2; ");
Ecco una sintesi del codice (ho cancellato quello che non aveva a che fare con questo topic)
Codice: Seleziona tutto
<?php
if (!defined('IN_PHPBB'))
{
exit;
}
$sql = "SELECT ut.user_id, ut.id_rand, pt.user_id, pt.pf_phpbb_website
FROM " . USERS_TABLE . " ut, " . PROFILE_FIELDS_DATA_TABLE . " pt
WHERE pt.pf_phpbb_website IS NOT NULL
AND ut.id_rand = 1
AND ut.user_id = pt.user_id
ORDER BY ut.user_id DESC LIMIT 1";
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
$template->assign_block_vars('lista_banner',array(
'USER_COR' => $row['user_id'],
$id = $row['user_id']
));
}
// Mi connetto al database mysql
$dbi = mysqli_connect("localhost", 'root', '', 'sbg');
// porto il valore della tabella id_rand a 2 così non potrà essere usata nuovamente prima delle altre
$req = mysqli_query($dbi, "UPDATE `phpbb_users` SET id_rand = 2 WHERE user_id = '$id'; ");
// porto il valore della tabella id_rand a 1 così potrà essere usata nuovamente
$req1 = mysqli_query($dbi, "UPDATE `phpbb_users` SET id_rand = 1 WHERE user_id > 1 AND '$id' = 2; ");
?>