Mi faccio perdonare..da riposati il cervello rende meglio. Spero questa soluzione possa essere ritenuta utile (pillola o simili) in futuro per coloro che si ritroveranno a fronteggiare un problema simile.
Dunque.
-----------------------------------------------------------------------------------------------------
Elementi in gioco:
- Una tabella contenente dei record che contengono "una posizione" da 1 a 10. (DBMS: MySQL).
Scopo:
1) Estrarre tutti gli elementi compresi tra le posizioni 1 e 10 e che soddisfano il criterio "dell'attivazione", ovvero, se il link dev'essere visualizzato sul sito web (o altrove) oppure no.
2) Dato il punto 1, bisogna visualizzare in maniera random tutti i risultati posizione per posizione. Ovvero, se ci sono 2 risultati nella posizione 1, questi (al refresh) dovranno subire la (passatemi il termine và..) "randomizzazione"..o effetto shuffle..o quello che preferite.
3) Dati i secondi punti precedenti, considerare l'eventualità in cui NON ci siano record nella tabella (ovvero: mysql_num_rows($query_partenza) == 0)..oppure che NON ci siano risultati scaturenti dai risultati estratti dalla tabella, ma in riferimento ad una specifica posizione (ovvero: Risultati posizione 1: 3 - Risultati posizione 5: ZERO).
Versione precedente:
Inviavo 10 query, estraevo 10 risultati, facevo 10 controlli diversi, 10, 10, 10, 10..
Risultato:
Originariamente inviato da hyde82
Versione ATTUALE:
Codice PHP:
<?php
// Unica query..dormire fa bene..e BETWEEN pure..
$query = "SELECT dato_1,dato_2,posizione_dato FROM tabella_dati WHERE posizione_dato BETWEEN '1' AND '10' AND visualizzabile='Y'";
$invio = mysql_query($query,$db);
$result = mysql_num_rows($invio);
if($result > 0) { // Gestione caso generale in cui la tabella non restituisce nulla..a voi la creazione dell'ELSE.
while($vai = mysql_fetch_row($invio)) {
switch($vai[2]) {
case 1: $dato1[] = $vai[0]; $datoDiDato1[] = $vai[1]; break;
case 2: $dato2[] = $vai[0]; $datoDiDato2[] = $vai[1]; break;
case 3: $dato3[] = $vai[0]; $datoDiDato3[] = $vai[1]; break;
case 4: $dato4[] = $vai[0]; $datoDiDato4[] = $vai[1]; break;
case 5: $dato5[] = $vai[0]; $datoDiDato5[] = $vai[1]; break;
case 6: $dato6[] = $vai[0]; $datoDiDato6[] = $vai[1]; break;
case 7: $dato7[] = $vai[0]; $datoDiDato7[] = $vai[1]; break;
case 8: $dato8[] = $vai[0]; $datoDiDato8[] = $vai[1]; break;
case 9: $dato9[] = $vai[0]; $datoDiDato9[] = $vai[1]; break;
case 10: $dato10[] = $vai[0]; $datoDiDato10[] = $vai[1]; break;
}
}
// ..da subito: a voi la gestione dell'array risultante vuoto.
// Funzione che gestisce l'estrazione random degli elementi, comprende casi da 0 a count($max_elementi) ed impedisce di andare sotto zero..
function randomLink($array) {
$random = rand(0,count($array));
if($random == count($array)) {
$random--;
if($random < 0) {
$random = 0;
}
}
return $random;
}
$n = randomLink($dato1); // Basta passare solo un array di elementi per..
$risultatoInsieme1 = $dato1[$n]; // ..applicare l'indice da estrarre sia al primo insieme..
$risultatoInsiemeDiInsieme1 = $datoDiDato1[$n]; //..che al secondo..
// $risultatoInsieme1 è il dato che verrà visualizzato.
// $risultatoInsiemeDiInsieme1 ..idem come sopra, è il dato legato a $risultatoInsieme1
// ..ripetere questi tre passaggi per i restanti 9 insiemi..oppure migliorare lo script in generale, è possibile..
?>
Risultato:
Otterrete così l'estrazione random di elementi da visualizzare dove volete realizzare e...senza l'invio di 10 query
Casi di utilizzo:
Visualizzazione in "modalità shuffle" di link sponsorizzati, banner, altro.
Hope it helps,
W.