Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15

Discussione: Random e DB

  1. #1

    Random e DB

    ciao

    devo fare in modo che ad ogni apertura di pagina venga selezionato dal DB un'immagine a caso.

    Io ho pensato di fare tramite la funzione rand(); ... sonto quanti records ci sono nel DB e faccio :

    rand(0,$numero_records);

    Ed estrarre l'immagine con l'ID corrispondente al numero genrato random.

    Però io posso anche cancellare le immagini dal DB quindi ci possono essere dei "buchi" nell'ID..quindi la sequenza dei vari ID potrebbe essere invece che 1,2,3,4,5 .... una cosa del tipo 1,5,7,8,.... quindi se viene genrato il numero 2 non estre nessun immagine.

    Come posso ovviare a questo ?

    Ovvero ... se il numero generato random non ha il corrispondente ID nel DB ... ne provi a generare un'altro e rifaccia il controllo e così via ?

    Grazie !

  2. #2
    tu prendi da db in un array quindi il rand lo fai sull array e quindi non avresti il problema da te esposto...potresti fare tutto a monte nella query inserendo ORDER BY rand()


  3. #3
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Non ho mai provato ma prova cosi...

    SELECT * FROM table1 ORDER BY RAND() LIMIT 1

  4. #4
    Originariamente inviato da badaze
    Non ho mai provato ma prova cosi...

    SELECT * FROM table1 ORDER BY RAND() LIMIT 1
    non funzionerebbe ))))

    xche, ovviamente, il limit viene eseguito prima dell'order by

    SELECT * FROM table1 ORDER BY RAND()

    fai cosi, usa anche mysql_query_unbuffered, in questo modo eviti problemi carichi di memoria inutili, poi estrai UNA SOLA RIGA (invece di usare while($row = mysql_fetch_array($query)) usi direttamente $row = mysql_fetch_array($query)) ed infine lanci mysql_free($query) per scaricare la memoria inutile ^^

  5. #5
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Originariamente inviato da daniele_dll
    non funzionerebbe ))))

    xche, ovviamente, il limit viene eseguito prima dell'order by

    SELECT * FROM table1 ORDER BY RAND()

    fai cosi, usa anche mysql_query_unbuffered, in questo modo eviti problemi carichi di memoria inutili, poi estrai UNA SOLA RIGA (invece di usare while($row = mysql_fetch_array($query)) usi direttamente $row = mysql_fetch_array($query)) ed infine lanci mysql_free($query) per scaricare la memoria inutile ^^
    Guarda che ho appena provato è........... funziona !!!!

  6. #6
    Originariamente inviato da badaze
    Guarda che ho appena provato è........... funziona !!!!
    che versione di mysql hai?
    xche su mysql 3 se non erro nun funziava ^^

  7. #7
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Originariamente inviato da daniele_dll
    che versione di mysql hai?
    xche su mysql 3 se non erro nun funziava ^^
    Infatti su questo pc ho MySQL 4.0.15 ma domani provero' sul mio portatile che ha MySQL 3.

  8. #8
    Ho risolto così ... anche se poco elegantemente diciamo

    Codice PHP:
    //Funzione per estrarre un'immagine random
    function random(){
             
    $q_q mysql_query("SELECT * FROM foto");
             
    $q_foto mysql_num_rows($q_q);
             
    $num rand(1,$q_foto);

             
    $q_contr mysql_query("SELECT * FROM foto WHERE id = '".$num."'");
             
    $q_x mysql_num_rows($q_contr);

             if ( 
    $q_x == ) {

                           return 
    true;
                        }else{
                             return 
    $num;
                                                       }
             } 
    Grazie a tutti cmq !!!

  9. #9
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Originariamente inviato da piero06
    Ho risolto così ... anche se poco elegantemente diciamo

    Codice PHP:
    //Funzione per estrarre un'immagine random
    function random(){
             
    $q_q mysql_query("SELECT * FROM foto");
             
    $q_foto mysql_num_rows($q_q);
             
    $num rand(1,$q_foto);

             
    $q_contr mysql_query("SELECT * FROM foto WHERE id = '".$num."'");
             
    $q_x mysql_num_rows($q_contr);

             if ( 
    $q_x == ) {

                           return 
    true;
                        }else{
                             return 
    $num;
                                                       }
             } 
    Grazie a tutti cmq !!!
    Due cose :
    1° : prova con un : select count(*) as conta from tabella
    cosi non userai molta memoria
    2° : se non hai id consecutivi non funzionerà. Prova cosi

    function randomImage() {
    $query = "select count(*) as conta from tabella";
    $res = mysql_query($query);
    list($conta) = mysql_fetch_array($res);
    return rand(0,$conta-1);
    }

    nello script principale....
    $a = randomImage();
    $query = "select * from tabella limit $a,1";
    $res = mysql_query($query);

  10. #10
    Originariamente inviato da badaze
    2° : se non hai id consecutivi non funzionerà. Prova cosi
    Non capisco perchè ?

    Io prima controllo se l'id scelto random c'è nella tabella, se non c'è ne è ... ne prova un'altro e così via ...

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.