Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    2 while consecutivi bloccano tutto

    Ciao a tutti, vi espongo il problema, ho una query sql e 2 while non annidati ma uno sotto l'altro per effettuare dei controlli, vi posto il codice.

    Codice PHP:
    $citta_arr=array();
    $result mysql_query("QUERY") or die("ERRORE");

    while(
    $row mysql_fetch_assoc($result))
            {
                
    $cittaa=$row['citta'];
                if(!
    array_key_exists($cittaa$citta_arr)){
                    
    $citta_arr[$cittaa]=0;
                }
                
                
    $citta_arr[$cittaa]++;    
            }

    if(
    mysql_num_rows($result)<=0){
        echo
    "<script type='text/javascript'>
                window.location='index.php?err=nr&src=
    $dove1&arrivo=$arrivo&partenza=$partenza&ck=$ckin';
            </script>"
    ;
    }
    elseif(
    count($citta_arr)>=2){
             
    REDIRECT VARI
    }
    else{
        
    //echo mysql_num_rows($result);

                
        
    while($riga mysql_fetch_array($result))
            {
                
    $distanza=$riga['dist'];
                
    $distanza number_format($distanza1);
                
    $hid=$riga['hid'];
                
    $citta=$riga['citta'];

                            
    ecc ecc ecc.....
                       } 

    In definitiva il primo while mi serve per scorrere le città e verificare praticamente quante ce ne sono ed effettuare dei vari redirect che aggiungerò, il secondo while è per l'impaginazione dei dati nel caso ci sia una sola città che contenga le strutture che vado a ricercare nella query.

    Levando la prima query funziona tutto regolarmente, il mio dubbio è: conoscete un modo per effettuare il primo controllo sulla query????

    ciauu

  2. #2
    Non ho capito bene ne' la struttura della tabella ne' cosa esattamente devi fare, spiega meglio.

  3. #3
    Ok, allora, la query mi restituisce delle strutture che stanno nel mio database secondo il criterio di ricerca per città (tramite form), può capitare che per esempio cercando delle strutture a "mila" il db mi restituisca "MILAzzo", "MILAno". Il primo while mi serve per generare un array e controllare quante città sono state trovate, se sarà solo una, tutto procede normale, se le città sono più di una mi rimanda ad una pagina di selezione tra le città trovate.

  4. #4
    Allora controlla con mysql_num_rows() quanti record ti restituisce la query (subito dopo la query stessa, prima del primo while) e agisci differentemente a seconda che il valore sia 1 (una sola citta') o maggiore di 1.

  5. #5
    eheheh magari così semplice

    come sopra, il db mi restituisce le strutture, non le città direttamente.

    Esempio:

    Ricerca = Mila

    Risultato query:

    MILAzzo: 3 strutture.
    MILAno: 4 strutture.

    Se apppunto trova più di due città tra la ricerca totlae avviene il redirect.

    il mysql_num_rows sarebbe inutile perchè si baserebbe sulle strutture

  6. #6
    Ah, allora o fai due query o usi http://uk.php.net/manual/en/function...-data-seek.php per "riavvolgere" il recordset dopo il primo while e ricominciare da capo.

  7. #7
    Avevo pensato anche io alla doppia query, ma essendo alle volte risultati che possono arrivare anche a diverse migliaia, avevo paura per la pesantezza della pagina, pensavo ci fosse un metodo che mi sfugge per scorrere i risultati della query senza doppiarla.

  8. #8
    Beh per evitare di scorrere l'intera tabella per cercare valori duplicati, puoi fare una query con DISTINCT per cercare solo i valori unici. Non hai riportato la query quindi non posso scendere nel dettaglio.

  9. #9
    Codice PHP:

    $result 
    mysql_query("SELECT *, TRUNCATE ( 6363 * sqrt( POW( RADIANS($lat) - RADIANS(l.lat) , 2 ) + POW( RADIANS($longit) - RADIANS(l.longit) , 2 ) ) , 3 ) AS dist FROM TABELLA AS l WHERE TRUNCATE ( 6363 * sqrt( POW( RADIANS($lat) - RADIANS(l.lat) , 2 ) + POW( RADIANS($longit) - RADIANS(l.longit) , 2 ) ) , 3 ) < $dist OR indirizzo LIKE '%$dove1%' OR citta LIKE '%$dove1%' ORDER BY (citta LIKE '%$dove1%' OR indirizzo LIKE '%$dove1%') DESC, dist ASC"
    Ecco la query, i LIKE mi servono perchè con gli = sarebbe troppo selettiva, e poi perchè ho bisogno che mi trovi diverse città .

  10. #10
    Beh intanto se assegni (giustamente) un alias per quella lunghissima espressione poi usalo nel WHERE invece di riscriverla

    Poi se vuoi prima fare una query piu' "breve" per cercare quali citta' vengono trovate (e quali) puoi usare qualcosa del genere:

    codice:
    SELECT citta, COUNT(*)
    FROM tabella
    WHERE ..............
    GROUP BY citta
    e fai la query "complessa" solo se necessario.

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.