Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 17 su 17

Discussione: Risultati di una query

  1. #11
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    11
    Ho seguito il tuo consiglio e ho creato le due tabelle.
    Anche la funzione orarioAula($aula) è perfetta, ma ho un ultimo problema: a volte in un'aula ci sono due docenti, ma la funzione ne riporta uno solo.
    Nella tabella iniziale questa compresenza era indicata con un asterisco:
    Rossi | 2as | 1as*
    Bianchi | 3bs | 1as*

    Nella tabella "Lezioni" la funzione giustamente distingue tra 1as e 1as*, considerandole - se ho ben capito - due aule diverse.
    E' possibile chiedere alla funzione di considerare le 1as*, 2as* ecc. come 1as, 2as...?
    E, soprattutto, in questi casi è possibile fare in modo che la funzione restituisca entrambi i cognomi dei docenti?

    Grazie ancora.

  2. #12
    Utente di HTML.it L'avatar di Ceras
    Registrato dal
    Oct 2009
    Messaggi
    141
    Originariamente inviato da gioder
    Ho seguito il tuo consiglio e ho creato le due tabelle.
    Anche la funzione orarioAula($aula) è perfetta, ma ho un ultimo problema: a volte in un'aula ci sono due docenti, ma la funzione ne riporta uno solo.
    Nella tabella iniziale questa compresenza era indicata con un asterisco:
    Rossi | 2as | 1as*
    Bianchi | 3bs | 1as*

    Nella tabella "Lezioni" la funzione giustamente distingue tra 1as e 1as*, considerandole - se ho ben capito - due aule diverse.
    E' possibile chiedere alla funzione di considerare le 1as*, 2as* ecc. come 1as, 2as...?
    E, soprattutto, in questi casi è possibile fare in modo che la funzione restituisca entrambi i cognomi dei docenti?

    Grazie ancora.
    In realtà la query:
    SELECT cognome FROM tab WHERE $nomeCampo='$aula

    restituisce TUTTI i cognomi dei professori che in un determinato orario e aula fanno lezione. Nella funzione però viene preso solo il primo elemento della lista ($ris[0]['cognome']), davo per scontato che ce ne fosse al massimo uno.
    Per gestire questa cosa basta iterare sul risultato della query, si può sostituire questo:

    Codice PHP:
    $orarioAula[$giornoSettimana][$orario] = $ris[0]['cognome']; 
    con questo:

    Codice PHP:
    $orarioAula[$giornoSettimana][$orario] = $ris[0]['cognome'];
    for (
    $i=1$i<count($ris); $i++)
        
    $orarioAula[$giornoSettimana][$orario] .= ", " $ris[$i]['cognome']; 
    In questo modo orarioAula(giornoSettimana,orario) conterrà non più il primo professore, ma la lista dei professori in questa forma: "cognome1, cognome2, ..."

    p.s. il simbolo .= è una abbreviazione di concatenazione di stringhe, in pratica
    $s .= "ciao";

    è equivalente a
    $s = $s . "ciao";


    edit: mi sono accorto che nella funzione orarioAula creavo l'array bidimensionale $orarioAula, ma non lo restituivo!!! Quindi la funzione dovrebbe terminare con un return($orarioAula), a meno che non si vuole stampare l'output direttamente nella funzione

  3. #13
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    11
    Perfetto! Proprio quello che cercavo.
    Risolto anche il problema dell'asterisco.

    Molte grazie.

  4. #14
    Utente di HTML.it L'avatar di Ceras
    Registrato dal
    Oct 2009
    Messaggi
    141
    Originariamente inviato da gioder
    Perfetto! Proprio quello che cercavo.
    Risolto anche il problema dell'asterisco.

    Molte grazie.
    Il problema dell'asterisco non l'avevo proprio visto!

  5. #15
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    11
    Spero di non abusare della tua pazienza e della tua cortesia.
    Sto cercando di capire il codice che hai postato, per imparare qualcosa in più.

    Ho provato a modificare il codice che genera le 2 tabelle Professori e Lezioni, in modo da inserire nella tabella Professori non solo il cognome ma anche il nome, richiamato anch'esso dalla tabella madre.

    La parte del tuo codice è questa:
    Codice PHP:
    // 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 
    Ho provato a modificarlo così:
    Codice PHP:
    // caricamento della tabella iniziale dal db
    $tab caricaQuery("SELECT * FROM docenti_orario", array('cognome''nome',
                                                
    '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'));

    // 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'];
        
    $nome2 $tab[$i]['nome'];
        
        
    // creazione nuovo professore
        
    $idProfessore eseguiQueryInsert("INSERT INTO Professori (cognome, nome) VALUES ('$cognome', '$nome2')");
        
        
    // 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
            
    }

    L'effetto è che i nomi li inserisce, ma ogni record viene inserito nella tabella Professori due volte. Credo che l'errore sia nella seconda variabile del ciclo "for", ma non riesco a venirne a capo.

    Se hai tempo...

    Grazie

  6. #16
    Utente di HTML.it L'avatar di Ceras
    Registrato dal
    Oct 2009
    Messaggi
    141
    Originariamente inviato da gioder
    ...
    Mi sembra tutto a posto... Ma hai cancellato le 2 tabelle Professori e Lezioni prima di eseguire la funzione? Altrimenti la funzione aggiungerà di nuovo le lezioni e i professori a quelli già esistenti!

  7. #17
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    11
    L'avevo fatto. Eliminate e ricreate. Ma forse avevo fatto qualche errore.
    Ci ho riprovato dopo aver letto il tuo post e tutto sembra funzionare.

    Grazie

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 © 2026 vBulletin Solutions, Inc. All rights reserved.