Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Dati in tabella mysql

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    6

    Dati in tabella mysql

    Salve a tutti ragazzi, sono nuovo ma vi seguio da molto tempo. Spero possiate darmi una mano a risolvere questo problemino.
    In sostanza ho una tabella in un db mysql, all'interno di questa tabella sono riportati dei dati, generati da una query, lanciata ogni settimana. Nello specifico questa è la pagina php a cui sto lavorando:
    Codice PHP:
    $cn mysql_connect("localhost""user""pass");
        
    mysql_select_db("name_"$cn);
        
    $query mysql_query("SELECT * FROM albergo"$cn);
        
    $quanti mysql_num_rows($query);
        if (
    $quanti == 0)
        {
            echo 
    "Nessun record!";
        }
        else
        {
    for(
    $x=0$x<$quanti$x++)   
    {    
    $rs mysql_fetch_row($query);             
    $data$rs[0];             
    $n_maschi$rs[1];              
    $n_femmine$rs[2];     
    $n_bambini$rs[3];
    $n_macchine$rs[4];     
    $n_wifi$rs[5];      

     echo 
    "data: " $data "
    "
    ;            
     echo 
    "n_maschi: " $n_maschi "
    "
    ;                        
     echo 
    "n_femmine: " $n_femmine "
    "
    ;             
     echo 
    "n_bambini: " $n_bambini "
    "
    ;              
     echo 
    "n_macchine: " $n_macchine "
    "
    ;             
     echo 
    "n_wifi: " $n_wifi "
    "
    ;
     }
        }
        
    mysql_close($cn);
    ?> 
    Quello che dovrei fare è lavorare con questi dati contenuti nella tabella.
    Il problema è che con il "for", i dati mi vengono stampati tutti, ma non posso lavorare con quelli della riga precedente, riesco a lavorare solo con quelli della riga "corrente", o meglio della riga interessata in quel momento dal for. A me servirebbe fare delle operazioni del tipo: $n_maschi(settimana corrente)/$n_maschi(settiamana precedente, cotenuta nel precedente for), per vedere ad esempio l'incremento settimanale ecc...come dovrei fare?
    E se volessi fare in una riga "$n_maschi(settimana corrente)/$n_maschi(settiamana precedente)" e in quella dopo $n_maschi(settimana corrente)/$n_maschi(quattro settimane indietro)"?

    Grazie in anticipo a chi mi risponderà.

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    6
    Ragazzi probabilmente la richiesta è incomprensibile, ma immagino che la risoluzione sia veramente semplice. Riprovo a spiegare: questa è la tabella:

    |data |n_maschi| n_femmine | n_bambini | n_macchine | n_wifi |
    |28/11 |50| 27| 3| 12| 33 |
    |05/12 |57| 12| 0| 21| 14 |
    |12/12 |32| 19| 13| 13| 44 |

    Con lo script di sopra, la stampo pari pari al database, ma a me servirebbe poter fare delle operazioni tra righe appartenenti a "cicli for" diversi:
    $n_maschi (|05/12 |) /$n_maschi (|12/12 |), ma come faccio se $n_maschi contiene solo l'ultimo valore (32)?

  3. #3
    Ciao,
    mah a dire il vero ci sono molti modi...
    dipende un po' da cosa devi fare di preciso...

    il primo che mi viene in mente è, ad esempio, usare mysql_data_seek (http://php.net/manual/en/function.mysql-data-seek.php) per muoversi nel result set...

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    6
    Ciao, ti ringrazio tanto per la dritta, ma potresti farmi un esempio veloce? Perchè non ho capito come dovrei fare.

  5. #5
    quando hai il tuo resultset:
    $query = mysql_query("SELECT * FROM albergo", $cn);

    con mysql_data_seek() lo puoi navigare

    con mysql_data_seek($query, 0) lo riporti alla prima riga
    $rs = mysql_fetch_row($query); //qui leggi i dati della prima riga
    con mysql_data_seek($query, 2) lo porti alla treza righa
    $rs = mysql_fetch_row($query); //qui leggi i dati della terza riga
    ecc...

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    6
    Ok, grazie per la dritta, sto sperimentando, ma non riesco ad uscirne . Ho fatto in questo modo:

    $query = mysql_query("SELECT * FROM albergo", $cn);
    $quanti = mysql_num_rows($query);
    if ($quanti == 0)
    {
    echo "Nessun record!";
    }
    else
    {
    for($x=0; $x<$quanti; $x++)
    {
    $rs = mysql_fetch_row($query);
    $data= $rs[0];
    $n_maschi= $rs[1];
    $n_femmine= $rs[2];
    $n_bambini= $rs[3];
    $n_macchine= $rs[4];
    $n_wifi= $rs[5];

    echo "data: " . $data . "
    ";
    echo "n_maschi: " . $n_maschi . "
    ";
    echo "n_femmine: " . $n_femmine . "
    ";
    echo "n_bambini: " . $n_bambini . "
    ";
    echo "n_macchine: " . $n_macchine . "
    ";
    echo "n_wifi: " . $n_wifi . "
    ";

    $rs2 = mysql_data_seek($query, 0);
    $rs3 = mysql_fetch_row($query);
    $data3= $rs3[0];
    $n_maschi3= $rs3[1];
    $n_femmine3= $rs3[2];
    $n_bambini3= $rs3[3];
    $n_macchine3= $rs3[4];
    $n_wifi3= $rs3[5];

    echo "test percentuale maschi: " . $n_maschi3/$n_maschi. "
    ";
    echo $n_bambini . "
    ";
    echo $n_bambini3 . "
    ";

    }
    }
    mysql_close($cn);

    In sostanza ho aggiunto all'interno del ciclo
    $rs2 = mysql_data_seek($query, 0);
    $rs3 = mysql_fetch_row($query);
    e poi ho assegnato alle variabili i valori della prima riga della tabella, in maniera da poter fare le operazioni rispetto alla prima riga. Purtroppo però non funziona perchè il ciclo successivamente mi stampa solo i valori della riga 1 (che sarebbe la seconda) sino a quando la condizione del ciclo non è soddisfatta "$x<$quanti".
    Ditemi pure se non è chiaro. Grazie ancora.

    PS. Gli ultimi echo sono per test, ma purtroppo mio riportano solo i valori di riga 0 e riga 1.

  7. #7
    la soluzione è abbastanza semplice

    il ciclo che ti estrae i dati, visto che necessiti questa particolare elaborazione, fai si che inserisca tutto quanto in un array così da poter fare l'operazione che necessiti senza problemi

    detto questo, però, qualche suggerimento tecnico:
    - mysql_num_rows($query) è lento come la morte, il controllo che fai lo puoi fare a posteriori
    - invece di usare mysql_fetch_row usa mysql_fetch_assoc che ti restituisce un array che invece di usare chiavi numeriche come indice della colonna utilizza direttamente il nome ( www.php.net/mysql_fetch_assoc )
    - mysql_data_seek in generale non ti serve ... è vero che potresti usarlo evitando di fare l'array, come ti ho indicato prima, ma non so quanto sarebbe più veloce l'elaborazione :\ ... indubbiamente però è molto più complessa

    Esempio

    codice:
    $query = mysql_query("SELECT * FROM albergo", $cn);
    $conteggio_records = 0;
    while($row = mysql_fetch_assoc($query))
    {
        $conteggio_records++;
        ... fai quello che devi fare ... ma al posto di 0, 1, 2 ecc come indice del dato estratto utilizzi direttamente il nome della colonna del database ...
    }
    
    // Liberi la memoria
    mysql_free_result($query);
    
    // A questo punto $conteggio_records sarà maggiore di zero se c'è qualcosa, altrimenti sarà pari a zero
    if ($conteggio_records == 0)
    {
        echo "Nessun record!";
    }

    Qui un esempio completo con l'array
    codice:
    $query = mysql_query("SELECT * FROM albergo", $cn);
    $conteggio_records = 0;
    $records = array();
    while($row = mysql_fetch_assoc($query))
    {
        $conteggio_records++;
        $records[] = $row;
    }
    
    // Liberi la memoria
    mysql_free_result($query);
    
    // A questo punto $conteggio_records sarà maggiore di zero se c'è qualcosa, altrimenti sarà pari a zero
    if ($conteggio_records == 0)
    {
        echo "Nessun record!";
    }
    else
    {
        for($indice = 0; $indice < $conteggio_records; $indice++)
        {
            $row = $records[$indice];
    .
    .
    .
    
        }
    }
    in questo contesto ti basta semplicemente spostare il codice che ti elabora i dati nel ciclo for di sotto, e la riga precedente la prendi con $indice - 1 ... ovviamente assicurati che $indice non sia zero prima di fare l'accesso all'indice precedente altrimenti ti da errore

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    6
    Grazie mille daniele_dll, ne sai sempre una più del diavolo :P .
    Mi chiedo però, se volessi stampare una riga della tabella e sotto il calcolo legato alla riga precedente per esempio, come dovrei fare utilizzando il tuo codice?
    Ti faccio l'output per essere più chiaro:


    28/11 è la prima settimana, quindi i primi calcoli percentuali saranno nulli.
    Il calcolo corrispondente è di questo tipo: (1 - [n_maschi(28/11) / n_maschi (05/12)]).
    Come dovrei farlo?
    Non riesco a capire come prendere un risultato vecchio e subito dopo quello nuovo, cioè come faccio a comunicare: $row["n_maschi" - 1] / $row["n_maschi"] ?
    Ovviamente il -1 l'ho inventato io, è per farti capire. Grazie ancora.

  9. #9
    se
    $row = $records[$indice];

    ti da la riga corrente

    $row_previous = $records[$indice - 1];

    ti da la riga precedente

    ovviamente onde evitare di far succedere una tragedia controlla se c'è la riga precedente e comportati di conseguenza ... un codice del genere dentro il ciclo for dovrebbe fare al caso tuo

    codice:
    if ($indice == 0)
    {
        // riga precedente inesistente
    }
    {
        $row_previous = $records[$indice - 1];
    }

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.