Visualizzazione dei risultati da 1 a 8 su 8

Discussione: query con rand()

  1. #1
    Utente di HTML.it L'avatar di mariox
    Registrato dal
    Nov 2006
    Messaggi
    837

    query con rand()

    Buonasera a tutti, avrei un problema nell'utilizzo della funziona rand() di Mysql.

    In pratica eseguo questa query:

    Codice PHP:
    $query ="SELECT ID, ulr, immagine FROM tabella WHERE url = 'S' AND image IS NOT NULL ORDER BY RAND() LIMIT 1"
    in pratica ricarico la pagina ogni tot secondi per poter caricare un'immagine differente, pescata a caso dalla funzione rand. Ora il problema è che il rand prende dal db un'immagine e può capitare che riprende la stessa immagine. E' possibile utilizzare la funzione rand() in modo tale che prende le immagini dal db in modo casuale ma non le ripeta?
    Grazie a tutti.

  2. #2
    Utente di HTML.it L'avatar di mariox
    Registrato dal
    Nov 2006
    Messaggi
    837
    up

  3. #3
    Utente di HTML.it L'avatar di mariox
    Registrato dal
    Nov 2006
    Messaggi
    837
    up

  4. #4
    a mio avviso l'utilizzo del rand() è inappropriato nel "order by"

    una possible soluzione è, l'estrazione di tutte le immagini in un array php

    (supponendo la tua query sia esatta)
    $query ="SELECT ID, ulr, immagine FROM tabella WHERE url = 'S' AND image IS NOT NULL";

    utilizzi la funzione $random = (rand()%9); <- in questo caso estrae numeri da 0 a 9.. e selezioni l'elemento del'array corrispondente.

  5. #5
    Utente di HTML.it L'avatar di mariox
    Registrato dal
    Nov 2006
    Messaggi
    837
    Intanto grazie per la tua risposta.

    Non tutti gli ID possiedono un'immagine, quindi eseguendo la mia query:

    Codice PHP:
    $query ="SELECT ID, ulr, immagine FROM tabella WHERE url = 'S' AND image IS NOT NULL ORDER BY RAND() LIMIT 1"
    otterrò per esempio questi valori di ID (1,5,6,10,11).

    Ogni tot secondi ricarico l'immagine per far pescare a caso un ID dalla mia tabella, il problema è che la funzione rand() ripete + di una volta la stessa immagine. Io vorrei che tale funzione potesse pescare a caso senza ripetere la stessa immagine + di una volta.

    La tua funzione penso che non mi sia utile.

  6. #6
    potresti salvare in un array lo "storico" delle visualizzazioni, e ad ogni refresh te lo porti dietro..se viene riestratta l'immagine che era stata utilizzata precedentemente la escludi..

    oppure, per essere sicuro di farle passare tutte, estrai la tua lista di id, con immagini e le metti in un array, estrai un elemento a caso dall'array, visualizzi l'immagine ed elimini l'elemento dall'array, passi quest'ultimo alla pagina successiva dove verrà ripescato un altro elemento, così via fino ad esaurirsi tutti gli elementi, quando questo array non esiste ( 1° visita) oppure è finito, lo ricarichi tramite query, eventualmente, per essere sicuro che l'ultima estratta non sia Uguale alla prima del nuovo ciclo applichi il metodo dello "storico" facendogli eseguire una nuova estrazione.

  7. #7
    Utente di HTML.it L'avatar di mariox
    Registrato dal
    Nov 2006
    Messaggi
    837
    di nuovo grazie per la risposta.
    Dato che è un pò macchinoso, potresti postare un esempio?

  8. #8
    spero di essere + esaustivo con questo piccolo esempio

    Codice PHP:
    <?
    //controllo se esite array - se non esiste o se è vuoto lo inizzializzo da query
    $id=array(1,4,3,5,8,7,9);
    //estraggo un elemento a caso
    $lunghezza=count($id);
    $lunghezza_id=$lunghezza-1;
    $random = (rand()%$lunghezza_id);
    print(
    "$id[$random]");

    unset(
    $id[$random]);

    //passi all'altra pagina l'array 
    ?>
    con questo codice ti estrae a caso un elemento dall'array e lo elimina dopo averlo visualizzato.. per questione di tempo non ho trattato la questione
    Ho l'aray si o no?
    se si, ... se no...

    e il passaggio dello stesso alla pagina successiva.. ma se serve posso farti anche quella parte senza problemi..

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.