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

Discussione: query

  1. #1
    Utente di HTML.it L'avatar di ttcc
    Registrato dal
    Dec 2008
    Messaggi
    486

    query

    ciao a tutti,
    ho problema sulle query;

    Ho tre tabelle
    1
    allievo
    id
    allievo
    2
    docenti
    id
    docente
    materia
    monteore
    3
    presenze
    id
    presenze
    materiaid
    allievoid

    ho scritto diverse query per incrociare e visualizzare i dati del db. Però me ne manca una dove non riesco proprio....

    cerco una query che mi dia gli allievi, le materie e il sum delle presenze degli allievi per ciascuna materia. Ho pensato a una sub query ma non riesco ad impostarla....
    come si può fare???

  2. #2
    Utente di HTML.it L'avatar di echoweb
    Registrato dal
    Sep 2008
    Messaggi
    419
    Prova così...

    Codice PHP:
    select d.materia MATERIAa.allievo ALLIEVOsum(p.presenzePRESENZE
    from allievo a
    ,docenti dpresenze p
    where p
    .materiaid=d.id and p.allievoid=a.id
    group by d
    .materia,a.allievo 

  3. #3
    Utente di HTML.it L'avatar di ttcc
    Registrato dal
    Dec 2008
    Messaggi
    486
    mi riporta le materie gli allievi e le singole presenze. la query non mi da la somma come desideravo. mi da un risultato che ottengo allo stesso modo con questa

    Codice PHP:
    select materiaallievopresenze
    from presenze
    join allievi on presenze
    allievoid allievi.id
    left join docenti on presenze
    materiaid docenti.id 

  4. #4
    Utente di HTML.it L'avatar di echoweb
    Registrato dal
    Sep 2008
    Messaggi
    419
    so che forse è un po' lungo da scrivere, ma mi puoi fare un esempio di come ti aspetti i dati?

    io ho simulato di avere due allievi, che hanno partecipato almeno due volte alla stessa materia facendo ore diverse, e in esito ho una cosa simile:

    Codice PHP:
    MATERIA____ALLIEVO__PRESENZE 
    italiano___Rossi____4 
    italiano___Bianchi__2 
    matematica_Rossi____6 
    matematica_Bianchi__12 
    oppure postami la struttura delle tabelle con i dati che faccio due prove....

    EDIT: dove in presenze, ho la somma delle singole lezioni effettuate dagli allievi (es. matematica bianchi 12, è la somma di 10 + 2)

  5. #5
    Utente di HTML.it L'avatar di ttcc
    Registrato dal
    Dec 2008
    Messaggi
    486
    nella tabella presenze ho i records che memorizzano i dati della singola presenza dell'allievo. ad esempio:

    oggi = 2 ore di francese = allievo x, y, z, ecc
    oggi = 3 ore di inglese= allievo x, y, z, ecc
    domani = 3 ore di francese = allievo x, y, z, ecc
    domani = 2 ore di inglese= allievo x, y, z, ecc
    dopodomani = 1 di francese = allievo x, y, z, ecc
    dopodomani = 3 di inglese = allievo x, y, z, ecc

    il risultato della query dovrebbe essere:

    allievo x francese 6 , inglese 8
    allievo y francese 6 , inglese 8
    allievo z francese 6 , inglese 8

  6. #6
    Utente di HTML.it L'avatar di echoweb
    Registrato dal
    Sep 2008
    Messaggi
    419
    eccho la query

    Codice PHP:
    SELECT  a.allievo ALLIEVO,
    d_mat.materia MATERIACEILING(sum(p_mat.presenze)/2PRESENZE,
    d_ita.materia MATERIACEILING(sum(p_ita.presenze)/2PRESENZE

    FROM allievo a
    docenti d_mat,docenti d_itapresenze p_itapresenze  p_mat
    WHERE 
    p_ita
    .allievoid=a.id AND p_ita.materiaid=d_ita.id and d_ita.id=1
    and
    p_mat.allievoid=a.id AND p_mat.materiaid=d_mat.id and d_mat.id=2

    GROUP BY a
    .allievo,d_mat.materiad_ita.materia 

    Nella query si suppone di conoscere le materie, ovvero 1 per italiano e 2 per matematica.
    Quindi se le materie sono di più, bisogna modificare il codice, seguendo questo come partenza.

    Fammi sapere se così va bene...

    ciao


    "Non soffocare la tua ispirazione e la tua immaginazione,
    non diventare lo schiavo del tuo modello"

    Vincent van Gogh

  7. #7
    Utente di HTML.it L'avatar di echoweb
    Registrato dal
    Sep 2008
    Messaggi
    419
    Funziona?


    "Non soffocare la tua ispirazione e la tua immaginazione,
    non diventare lo schiavo del tuo modello"

    Vincent van Gogh

  8. #8
    Utente di HTML.it L'avatar di ttcc
    Registrato dal
    Dec 2008
    Messaggi
    486
    ciao echoweb, scusa il ritardo.
    ho letto la mail ma ero fuori casa e sono rientrato solo ieri notte (ultimo giorno di ferie estive).
    contento di leggerti ho provato subito la tua query (mamma mia che query! non arriverò mai a questi livelli)
    mi sono messo all'opera, subito, senza perdere tempo e pieno di curiosità anche perchè qualche passo avanti l'avevo fatto anch'io.
    dunque la tua qury di primo botto mi da:

    Codice PHP:
    MySQL ha restituito un insieme vuoto (i.ezero righe 
    quindi penso che ci sia qualcosa ancora da sistemare....
    però vorrei che osservassi questa query di seguito (non completa e ottenuta prima che andassi in ferie):


    Codice PHP:
    select materiaallievosum(presenze) as tot 
     from presenze
    inner join allievi on allievi
    .id presenze.allievoid     
    left join docenti on presenze
    .materiaid docenti.id     
    group by allievoid
    materiaid 
    in effetti ottengo ciò che desidero:
    elenco materie e somma ore per singolo allievo. su questa credo che avrò un problema di distinct legato all'allievo (vedremo).


    ora devo lavorare su come avere l'output con php
    materie a sx in verticale
    alllievi in alto in orizzotale ("una sola volta")...
    ... e la somma ore a incrociare tra materia e allievo.
    probabilmente dovrò lavorare con "for". ci perderò un pò di tempo.
    a rileggerci


  9. #9
    Utente di HTML.it L'avatar di echoweb
    Registrato dal
    Sep 2008
    Messaggi
    419
    MySQL ha restituito un insieme vuoto (i.e. zero righe
    Per fare le prove ho creato le tue stesse tabelle: la tabella allievi, io l'ho chiamata allievo.
    Forse è per questo che ti da problemi, in quanto io l'ho testata e funziona benissimo, inoltre se riesci a usarla, risulta molto facile da utilizzare nel tuo script php.


    "Non soffocare la tua ispirazione e la tua immaginazione,
    non diventare lo schiavo del tuo modello"

    Vincent van Gogh

  10. #10
    Utente di HTML.it L'avatar di ttcc
    Registrato dal
    Dec 2008
    Messaggi
    486
    si avevo già corretto il nome della tabella allievi.
    in effetti adesso il risultato della query è veramente buono. però vedo due tre problemi:
    Codice PHP:
     ALLIEVI     MATERIA     presenza          MATERIA     presenza
    caio                    Informatica     3            Matematica       2 
    sempronio      Informatica             3  Matematica       2 
    tizio                Informatica     3            Matematica     2 
    1)
    il numero delle materie, in alcuni casi potrebbero prendere troppo spazio nell'output al punto da uscire fuori dalla pagina;
    2)
    le sum non sono congrui. per capire bene il motivo, almeno per me, devi provare a spiegarmi il ragionamento di:
    Codice PHP:
    SELECT  a.allievo ALLIEVO
    d_mat.materia MATERIACEILING(sum(p_mat.presenze)/2PRESENZE//(somma giusta)
    d_ita.materia MATERIACEILING(sum(p_ita.presenze)/2PRESENZE  //(somma sbagliata) 
    infine ultima domanda se le materie sono 15 devo scrivere 15 righe di quanto sopra? (ho capito bene?)



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