Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di giord
    Registrato dal
    Jan 2002
    Messaggi
    448

    2 tabelle. Inner join o ciclo (per essere ottimali)

    Ciao,
    non riesco ad arrivare ad una soluzione semplice.. di una relazione tra tabelle.

    Ho una tabella che chiamo e semplifico in questo modo
    - DOCENTE (id_docente, nome_docente)

    - CORSO (id_corso, nome_corso, docassociato_corso)

    E' una realazione uno a uno, quindi anche semplice azz
    Insomma in uno dei campi "docassociato_corso" inserisco l'id del docente relativo.

    Adesso vorrei relaizzare un report dei docenti in modo che sia così strutturat

    1) Nome docente (id_docente)
    2) Corso pinco,corso pallino etc (che sono tutti i corsi della tabella "corso" dove "docassociato_corso" è uguale all'id_docente in questione

    ho provato con un INNER JOIN ma mi sembra che non sia sufficiente occorrono più cicli? uno dentro l'altro

    Non penso sia la soluzione ottimale effetuare un ciclo WHILE dei docenti ed ogni docente effettura un'altra SELECT ..
    Grazie

  2. #2
    codice:
    SELECT * 
    FROM DOCENTE d, CORSO c
    WHERE d.id_docente = c.docassociato_corso
    AND d.nome_docente = 'Giovanni'

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it L'avatar di giord
    Registrato dal
    Jan 2002
    Messaggi
    448

    E' vero.
    Ma il nome docente non è una variabile della quale conosco il valore (questo apsetto non lo avevo esplicitato bene)

    Ma volevo in pratica una lista di tutti i DOCENTI con sotto i relativi CORSI

    Quindi N schede
    1) Nome docente 1 (id_docente)
    2) Corso pinco,corso pallino etc (che sono tutti i corsi della tabella "corso" dove "docassociato_corso" è uguale all'id_docente in questione

    1) Nome docente 2(id_docente)
    2) Corso pinco,corso pallino etc (che sono tutti i corsi della tabella "corso" dove "docassociato_corso" è uguale all'id_docente in questione
    etc

    Graziee

    Sto cercado d capire come ottimizzare quello che fino ad adesso ho appreso. Nel senso fino ad adesso qulche volta ho tirato a far funzionare...adesso vorrei capire invece quale è la via più breve e meno rindondante ..ma può essere che mi fasci la testa senza motivo..me ne rendo conto

  4. #4
    Avevo dato per scontato che se non ti interessava il nome sarebbe bastato toglierlo ....

    l'ordinamento lo farai in base a quel che ti pare ASC o DESC.

    Si poteva usare la sintassi con JOIN, ma e' assolutamente identica nella sostanza.

    codice:
    SELECT * 
    FROM DOCENTE d 
    JOIN CORSO c
    ON d.id_docente = c.docassociato_corso
    Per quanto riguarda la stampa dei record.... mi ricordo di averti postato una soluzione dove con una if controllavi il nome. Se il nome era diverso lo stampavi, se uguale lo saltavi...


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it L'avatar di giord
    Registrato dal
    Jan 2002
    Messaggi
    448
    Ciao,
    ero partito proprio dall'innerjoin ...e qui ci sono
    L'elemento problemtico è la stampa dei record.

    - parto con inner join + ciclo WHILE
    e
    mi stampa
    1) Docente Giovanni
    Corso: filosofia immorale

    2) Docente: Giovanni
    Corso: psicologia

    - MA vorrei arrivare ad ottenere questo
    1) Docente Giovanni
    Corso: filosofia immorale, psicologia

    Non dovrei utilizzare un altro ciclo all'interno del ciclo WHILE?
    Artiginalmente farei una query dentro un'altra query...

    nella prima passo i vari id dei docenti e poi per ognuno un'ulteriore query nella quale si seleziona della tabella dei corsi tutt quelli che sono associati al suddetto docente

    Ma, questa soluzione mi sembra molto artigianale..ed gravi sulla "pesantezza" dell'esecuzione dello script

    (adesso riguardo anche la soluzione che mi avevi suggerito.)

  6. #6
    Sono sicuro che lo avevo gia' fatto proprio con te ... anyway...

    pseudo codice...
    codice:
    $nome = '';
    
    while($row=ciclo estrazione) {
    
    if($nome != $row['nome']) { echo "stampa_nome"; }
    $nome = $row['nome'];
    
    echo $row[altro]
    
    }
    si commenta da solo....



    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Utente di HTML.it L'avatar di giord
    Registrato dal
    Jan 2002
    Messaggi
    448
    Forse hai ragione...era un acosa simile.

    Cmq sto provando ad avvicinarmici.
    ma per adesso l'unico modo con il quale raggiungo "l'obiettivo" è:

    codice:
    $query = "SELECT * FROM docenti GROUP BY nome_docente"; 
    	  $result = mysql_query($query, $db) or die (mysql_error());
    	  while ($row = mysql_fetch_array($result))
    	   { 
    	   echo $row['id_docente'];
    	   echo "-".$row['nome_docente']."
    ";
    	   $id_docente = $row['id_docente']; 
    	   
    	   $query2 = "SELECT * FROM corsi WHERE docassociato_corso
     = '$id_docente' GROUP BY titolo_corso"; 
    	  $result2 = mysql_query($query2, $db) or die (mysql_error());
    	  while ($row2 = mysql_fetch_array($result2))
    	   { 
    	   echo $row2['titolo_corso']."
    
    ";
    	   }//fine while corsi
    	   
    
    	   }// fine while docenti

    Devo riprendere un po' il via..

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.