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

Discussione: Risultati di una query

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    11

    Risultati di una query

    Buongiorno a tutti.

    Ho una tabella mysql relativa all'orario dei professori di una scuola. E' strutturata così:

    cognome | lun_1 | lun_2 | lun_3 | lun_4 | lun_5 | lun_6 | mar_1 ...
    Bianchi | 2bl | 1as | 5cl |...
    Rossi | 1as | 2bl | 1bs |...


    In php vorrei ricavare una tabella per, ad es., la classe 1as, in cui compaiano i nomi dei professori nelle rispettive ore:

    Ore | Lun | Mar | Mer | Gio | Ven | Sab
    1 | Rossi| ...
    2 | Bianchi |...
    ...

    E' possibile?
    Mi potete dare qualche suggerimento, qualche indicazione sulle funzioni da utilizzare?

    Grazie

  2. #2
    Utente di HTML.it L'avatar di tapu
    Registrato dal
    May 2008
    Messaggi
    885
    tu utilizzi solo quella tabella contenente gli n campi con i dati...
    crea una query dicendo di prelevare tutti i dati che :
    corrispondono al valore 1as

    successivamente crei la tua tabella con i valori correlati a quel campo!

    le funzioni da usare sono le classiche interrogazioni al db ...
    la variabile contenente la query
    la variabile che esegue la queri
    e il ciclo con al suo interno i valori dei campi della tabella

    humm.. non so se mi sono spiegato!

  3. #3
    Utente di HTML.it L'avatar di Ceras
    Registrato dal
    Oct 2009
    Messaggi
    141

    Re: Risultati di una query

    Originariamente inviato da gioder
    Buongiorno a tutti.

    Ho una tabella mysql relativa all'orario dei professori di una scuola. E' strutturata così:

    cognome | lun_1 | lun_2 | lun_3 | lun_4 | lun_5 | lun_6 | mar_1 ...
    Bianchi | 2bl | 1as | 5cl |...
    Rossi | 1as | 2bl | 1bs |...


    In php vorrei ricavare una tabella per, ad es., la classe 1as, in cui compaiano i nomi dei professori nelle rispettive ore:

    Ore | Lun | Mar | Mer | Gio | Ven | Sab
    1 | Rossi| ...
    2 | Bianchi |...
    ...

    E' possibile?
    Mi potete dare qualche suggerimento, qualche indicazione sulle funzioni da utilizzare?

    Grazie
    Si può creare una funzione php che "scansiona" tutti i professori fino a trovare la classe, e da lì viene generata la nuova tabella. Non credo che si possa fare tutto solo con una query mysql, ci vuole un po' di post-elaborazione...

    Se vuoi ti posto la funzione al volo, ma francamente credo che il database sia strutturato in un modo molto inefficiente.
    Una struttura ideale sarebbe di questo tipo:

    PROFESSORE(id, nome, ...)
    LEZIONE(idProfessore, giornoSettimana, orario, aula)

    Secondo me ti conviene di più trasformare la prima tabella in queste 2, guadagni molto in efficienza e per ottenere quello che vuoi esegui solamente delle query
    Se vuoi ti sviluppo il codice per creare queste 2 tabelle

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    11
    Grazie a entrambi per le risposte.

    Sono d'accordo sul fatto che non sia la struttura migliore, ma la tabella è strutturata così perché è l'adattamento di un file excel che mi viene consegnato da colleghi. Poiché l'orario cambia spesso, vorrei poter utilizzare quella struttura senza dover ogni volta modificare il file excel. Così ogni volta che ricevo mi basta convertire il file e inserire i dati nella tabella del database.

    Provando e riprovando coi while e i foreach mi sono perso. Sono riuscito a ricavare il quadro orario dei singoli professori ( http://www.magicroce.it/doc/orario_docenti.php ), ma per le classi è decisamente più complicato, almeno per me.

    Qualche riga di codice sarebbe graditissima

  5. #5
    Utente di HTML.it L'avatar di tapu
    Registrato dal
    May 2008
    Messaggi
    885
    bhe se hai un file excel potresti crearti un qualcosa che trasformi il file excel in un csv, lo scompatti in array in maniera da avere ogni righa in array e poi inserisci i valori che vuoi nella tabella opportuna...
    una volta creato lo script ti basterà inserire il file all'interno della tua applicazione e avrai n tabelle organizzate meglio!
    almeno non dovrai fare n query per ricavarti i dati!

  6. #6
    Utente di HTML.it L'avatar di Ceras
    Registrato dal
    Oct 2009
    Messaggi
    141
    Eccoti qui il codice per generare le 2 tabelle Professori e Lezioni:

    Codice PHP:
    <?
    include("config.php");

    // creazione tabella professori
    eseguiQuery("CREATE TABLE Professori "
                
    ."(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, "
                
    ."cognome VARCHAR(20) NOT NULL, "
                
    ."nome VARCHAR(20) NOT NULL "
                
    .") ENGINE = MYISAM ;");
                
    // creazione tabella lezioni
    eseguiQuery("CREATE TABLE Lezioni "
                
    ."(idProfessore INT NOT NULL , "
                
    ."giornoSettimana INT NOT NULL , "
                
    ."orario INT NOT NULL , "
                
    ."aula VARCHAR(5) NOT NULL "
                
    .") ENGINE = MYISAM ; ");


    // caricamento della tabella iniziale dal db
    $tab caricaQuery("SELECT * FROM tab", array('cognome'
                                                
    'lun_1''lun_2''lun_3''lun_4''lun_5''lun_6'
                                                
    'mar_1''mar_2''mar_3''mar_4''mar_5''mar_6'
                                                
    'mer_1''mer_2''mer_3''mer_4''mer_5''mer_6'
                                                
    'gio_1''gio_2''gio_3''gio_4''gio_5''gio_6'
                                                
    'ven_1''ven_2''ven_3''ven_4''ven_5''ven_6'
                                                
    'sab_1''sab_2''sab_3''sab_4''sab_5''sab_6'));

    // array associativo per i giorni di settimana
    $settimana = array('','lun','mar','mer','gio','ven','sab');

    // scorrimento di ogni riga (e quindi di ogni professore)
    for ($i=0$i<count($tab); $i++) {

        
    $cognome $tab[$i]['cognome'];
        
        
    // creazione nuovo professore
        
    $idProfessore eseguiQueryInsert("INSERT INTO Professori (cognome) VALUES ('$cognome')");
        
        
    // scorrimento dei giorni della settimana
        
    for ($giornoSettimana=1$giornoSettimana<=6$giornoSettimana++)
            
    // scorrimento degli orari
            
    for ($orario=1$orario<=6$orario++) {
                
    // recupero dell'aula (se null vuol dire che il professore non farà lezione)
                
    $aula $tab[$i][$settimana[$giornoSettimana] . "_" $orario];
                if (
    $aula != NULL)
                    
    eseguiQuery("INSERT INTO Lezioni (idProfessore, giornoSettimana, orario, aula) "
                                
    ." VALUES ($idProfessore$giornoSettimana$orario, '$aula')"); // inserimento della lezione
            
    }
    }

    ?>
    p.s. il database l'ho chiamato "prova" e la tabella iniziale "tab", ho impostato il campo giornoSettimana come intero (1=lunedì. 2=martedì, etc.)

  7. #7
    Utente di HTML.it L'avatar di Ceras
    Registrato dal
    Oct 2009
    Messaggi
    141
    ah, questo è il config.php (utilizzo sempre delle mie funzioni ausiliare per le query)

    Codice PHP:
    <?
    define
    ('DB_HOST''localhost:3307');
    define('DB_USER''root');
    define('DB_PASSWORD''');
    define('DB_DATABASE''prova');


    function 
    eseguiQuery($query) {
        
    $connessione mysql_connect(DB_HOSTDB_USERDB_PASSWORD);
        
    mysql_select_db('prova');
        
    $ris mysql_query($query);
        
    mysql_close($connessione);
        return 
    $ris;
    }


    function 
    eseguiQueryInsert($query) {
        
    $connessione mysql_connect(DB_HOSTDB_USERDB_PASSWORD);
        
    mysql_select_db('prova');
        
    $ris mysql_query($query);
        
    $id mysql_insert_id();
        
    mysql_close($connessione);
        return 
    $id;
    }


    function 
    caricaQuery($query$nomiDati) {
        
    $connessione mysql_connect(DB_HOSTDB_USERDB_PASSWORD);
        
    mysql_select_db('prova');
        
        
    $q mysql_query($query);

        
    $i=0;
        while (
    $riga mysql_fetch_array($q)) {
            for (
    $j=0$j<count($nomiDati); $j++)
                
    $ris[$i][$nomiDati[$j]] = $riga[$nomiDati[$j]];
            
    $i++;
        }

        
    mysql_close($connessione);
        return (
    $i==0) ? NULL $ris;
    }

    ?>

  8. #8
    Utente di HTML.it L'avatar di Ceras
    Registrato dal
    Oct 2009
    Messaggi
    141
    ho dimenticato la cosa più importante!

    Ecco la funzione che ricava l'orario di una certa aula (o meglio classe):

    Codice PHP:
    <?
    include("config.php");

    function 
    orarioAula($aula) {
        
    // array associativo per i giorni di settimana
        
    $settimana = array('','lun','mar','mer','gio','ven','sab');
        
        
    // scorrimento dei giorni della settimana
        
    for ($giornoSettimana=1$giornoSettimana<=6$giornoSettimana++) {
            
    // scorrimento degli orari
            
    for ($orario=1$orario<=6$orario++) {
                
    $query "SELECT cognome "
                        
    ."FROM Professori INNER JOIN Lezioni ON Professori.id = Lezioni.idProfessore "
                        
    ."WHERE aula='$aula' AND giornoSettimana=$giornoSettimana AND orario=$orario";
                
    $ris caricaQuery($query, array('cognome'));
                
                
    $orarioAula[$giornoSettimana][$orario] = $ris[0]['cognome'];
                
                echo(
    $settimana[$giornoSettimana] .$orario.": "$ris[0]['cognome']);
            }
            echo(
    "
    "
    );
        }
    }

    ?>

    edit: sembra un codice enorme e complicato (sopratutto il file che genera le 2 tabelle), ma sono i commenti che lo ingigantiscono! in realtà è parecchio semplice

  9. #9
    Utente di HTML.it L'avatar di Ceras
    Registrato dal
    Oct 2009
    Messaggi
    141
    A questo punto mi trovo e ti do la funzione che agisce direttamente sulla tabella iniziale

    Codice PHP:
    include("config.php");

    function 
    orarioAula($aula) {
        
    // array associativo per i giorni di settimana
        
    $settimana = array('','lun','mar','mer','gio','ven','sab');
        
        
    // scorrimento dei giorni della settimana
        
    for ($giornoSettimana=1$giornoSettimana<=6$giornoSettimana++) {
            
    // scorrimento degli orari
            
    for ($orario=1$orario<=6$orario++) {
                
    // individuazione del nome del campo da ricercare (es lun_1, mar_5, etc..)
                
    $nomeCampo $settimana[$giornoSettimana]."_".$orario;

                
    $ris caricaQuery("SELECT cognome FROM tab WHERE $nomeCampo='$aula'", array('cognome'));
                
                
    $orarioAula[$giornoSettimana][$orario] = $ris[0]['cognome'];            
                echo(
    $settimana[$giornoSettimana] .$orario.": "$ris[0]['cognome']);
            }
            echo(
    "
    "
    );
        }

    Però come già detto, ti consiglio di generare le 2 tabelle, per migliorare l'accesso al database

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    11
    Grazie! Non speravo tanto!

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.