Ho provato a seguire il ragionamento e non so se ci sono riuscito... puoi spiegare cosa vuoi ottenere? Non mi è del tutto chiaro perchè non imposti da subito nella query la condizione attivo=TRUE... in ogni caso la chiamata mutuamente ricorsiva non è il massimo... per stare allo schema che hai fatto potresti cambiare la funzione random_cd_check in modo da restituire semplicemente un valore booleano sostituendo l'intero blocco:
Codice PHP:
if ($check_random_cd_total>=1){
echo "cd attivo!\n";
echo "numero fortunello funzione check ".$rand_number."\n";
return $rand_number;
}else{
echo "cd non attivo!\n";
random_call($db);
}
con
Codice PHP:
return ($check_random_cd_total>=1);
e cambiando nella prima funzione:
Codice PHP:
$rand_number = mt_rand (1,$number);
$numerello = random_cd_check($rand_number,$db);
con:
Codice PHP:
$numerello = false;
while (!$numerello) {
$rand_number = mt_rand (1,$number);
$numerello = random_cd_check($rand_number,$db);
};
$numerello = $rand_number;
In sostanza: effettuare il controllo finchè l'esito non è positivo.
NOTA: NON HO ricontrollato il codice... verifica sulla base dell'idea suggerita, comunque.
ATTENZIONE: un ciclo come quello proposto - si fa spesso - in effetti non è per niente ottimizzato e potrebbe teoricamente essere indefinito...
Se vuoi semplicemente ottenere la posizione di un record casuale con il campo attivo=true, puoi fare
Codice PHP:
SELECT * FROM compactdisc WHERE compactdisc.attivo=TRUE ORDER BY rand() LIMIT 1
e settare $numerello = $result['id'] (supponendo che $result contenga il record recuperato dalla query)
una cosa strana in tutta la questione è che si suppone i record abbiano id numerico consecutivo... è così?