Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    query troppo pesante per il browser

    Ciao a tutti,
    ho un problema con una query che risulta essere troppo pesante per il browser:
    La query è composta da 3 passaggi annidati, che devono portare alla creazione di un menù di navigazione ad albero.
    Lo script in se funziona per le sezioni con meno voci ma quando si iniziano a superare i 500 record il browser crasha miseramente.
    Ecco il codice:

    Codice PHP:
            <?    
                
    #ob_start("albero");
                #select categoria - $i
                
    $querycat="SELECT * FROM CATEGORIA WHERE SEID = '$sez'";
                
    $resultcat=mysql_query($querycat) or die (mysql_error());
                
    $ncat=mysql_num_rows($resultcat);
                
                
    $i=0;
                while (
    $i $ncat){
                    
    $caid=mysql_result($resultcat,$i,"CAID");
                    
    $cat_caid=mysql_result($resultcat,$i,"CAT_CAID");
                    
    $canome=mysql_result($resultcat,$i,"CANOME");
                    
    $i++;
                    if(
    $cat_caid==""){
                        
    $k=0;
                    }else{
                        
    $k=$cat_caid;
                    }
                    echo 
    "f.add(".$caid.",".$k.",'".$canome."','categoria.php?cat=".$caid."');";

                    
    #select clip - $w
                    
    $queryclip="SELECT * FROM CLIP WHERE CAID = '$caid'";
                    
    $resultclip=mysql_query($queryclip) or die (mysql_error());
                    
    $nclip=mysql_num_rows($resultclip);
                    
                    for(
    $w=0;$w<$nclip;$w++){
                        
    $clid=mysql_result($resultclip,$w,"CLID");
                        
    $clipcaid=mysql_result($resultclip,$w,"CAID");
                        
                        
    #select titoli - $m
                        
    $querytit="SELECT * FROM TITOLO_CLIP WHERE CLID = '$clid'";
                        
    $resulttit=mysql_query($querytit) or die (mysql_error());
                        
    $ntit=mysql_num_rows($resulttit);                    
                        
                        for(
    $m=0;$m<$ntit;$m++){
                            
    $titoloclip=mysql_result($resulttit,$m,"TTNOME");
                            echo 
    "f.add(".$clid.",".$clipcaid.",'".$titoloclip."','clip.php?clid=".$clid."');";
                        }
                    }                
                }
                
    #ob_end_flush();
            
    ?>
    ho provato anche con un buffering con ob_start ma niente...
    qualche suggerimento?

    Grazie mille
    Software is like sex, it's better when it's free (Linus Torvald)
    Powered by Suse 10.1


    www.newzaion.com

  2. #2
    Non è il browser che crasha, bensì il server, che dopo trenta (nel tuo caso penso meno) secondi di esecuzione, blocca lo script tu puoi:
    a) aumentare il tempo massimo per l'esecuzione di uno script [vedi: http://it.php.net/manual/en/info.configuration.php]
    b) riscrivere completamente la query in modo da limitare il flusso di dati
    c) rivedere proprio l'assetto del database, per consentire una più semplice fruibilità dei dati

    Il mio consiglio è per la c: un interruzione dei dati che il tuo script genera significa che sovraccarichi comunque il server... cosa da evitare...

    Altri consigli... impostare ricerce limitando i campi selezionati (evita il SELECT *), crea colonne primarie (velocizza la ricerca su quelle colonne; imposta come primazio SEID per la tabella CATEGORIA, per esempio)...

    èS: io eviterei di chiamare la funzione mysql_result... sciogli i risultati in altro modo e crea un menù tutto insieme, non voce per voce
    Cristiano
    ---
    Originariamente inviato da rebelia : solo un nerd puo' pensare di tacchinare in un forum di informatica

  3. #3

    Risolto

    alla fine ho risolto facendo una view in mysql... l'assetto del db l'avrei rivisto volentieri ma i committenti non ne volevano sapere

    Grazie dell'aiuto
    Software is like sex, it's better when it's free (Linus Torvald)
    Powered by Suse 10.1


    www.newzaion.com

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.