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

Discussione: query di sottrazione

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

    query di sottrazione

    ciao a tutti,

    ho un problemino con la query di una tabella

    tab1
    id
    istituto
    valore

    i records di istituto sono diversi così anche i valori

    pertanto a un certo punto avrei bisogno di un totale (valore) frutto della differenza tra alcune voci del campo istituto
    "recuperi" sarebbe l'unica voce da sottrarre alle altre

    ho provato con questa query
    Codice PHP:
    select((select sum(differenza) as somma
    from orario
    where istituto 
    <> 'recuperi'
    -
    (
    select sum(differenza) as somma
    from orario
    group by istituto
    having istituto 
    'recuperi')) 
    ma il risultato è il totale come somma complessiva(senza sottrazione).
    ho provato le due query singolarmente e funzionano

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Puoi fare un esempio pratico? Almeno a me non è per niente chiaro il problema.

  3. #3
    Utente di HTML.it L'avatar di ttcc
    Registrato dal
    Dec 2008
    Messaggi
    486
    dunque dovrebbe essere così:

    Codice PHP:
    id_____istituto____valore

    1_____lavoro_____ 10
    2_____ferie_______20
    3_____recuperi____10
    4_____recuperi____05
    5_____lavoro_____ 20

    sum dei valori 
    "ferie e lavoro" da sottrarre a sum dei valori di "recuperi" 

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    codice:
    select 
    sum(if(istituto in('lavoro','ferie'),valore,0)) -
    sum(if(istituto = 'recuperi',valore,0))
    as differenza
    from tabella

  5. #5
    Utente di HTML.it L'avatar di ttcc
    Registrato dal
    Dec 2008
    Messaggi
    486
    una cosa del genere proprio non me la aspettavo!
    grande!
    però, so che sbufferai, ti devo chiedere un ulteriore aiuto....

    nella tabella su indicata ci devo aggiungere una relazione con un'altra tabella. ho provato a farla io
    ma non ci sono riuscito, come ecco ho provato:

    Codice PHP:
    $sql_3 "select nominativo,
    sum(if(istituto in('lavoro','ferie','malattia'),differenza,0)) -
    sum(if(istituto = 'recuperi',differenza,0))
    as differenza
    from nominativo
    INNER JOIN orario ON nominativo.id = orario.nominativoid
    WHERE nominativo = '
    $name' AND data_in_m between '$data_in' AND '$data_out'"
    di fatto la query dovrebbe essere frutto di un form dove individuo un range di tempo di un determinato operatore

    ho creato un'altra tabella
    tab2
    id
    nominativo

    e ho aggiunto nella tab1
    nominativoid

    ho provato con la query suddetta e mi da null
    dove sbaglio???

  6. #6
    Codice PHP:
    $sql_3 "select nominativo.*, 
    sum(if(istituto in('lavoro','ferie','malattia'),differenza,0)) - 
    sum(if(istituto = 'recuperi',differenza,0)) 
    as differenza 
    from nominativo 
    INNER JOIN orario ON nominativo.id = orario.nominativoid 
    WHERE nominativo = '
    $name' AND data_in_m between '$data_in' AND '$data_out'"
    Full Stack Developer presso Advice Lab
    Bonus Bitcoin
    Moon Bitcoin

  7. #7
    Utente di HTML.it L'avatar di ttcc
    Registrato dal
    Dec 2008
    Messaggi
    486
    originariamente avevo la seguente query e funzionava bene. in seguito ho dovuto apportare degli accorgimenti (valore da sottrarre)
    ecco la vecchia query:
    Codice PHP:
    $sql_3 "select istituto, SUM(differenza) as somma
    FROM nominativo  
    INNER JOIN orario ON nominativo.id = orario.nominativoid
    WHERE nominativo = '
    $name' AND data_in_m between '$data_in' AND '$data_out'"
    ho provato la query di Magicale

    Originariamente inviato da Magicale
    Codice PHP:
    $sql_3 "select nominativo.*, 
    sum(if(istituto in('lavoro','ferie','malattia'),differenza,0)) - 
    sum(if(istituto = 'recuperi',differenza,0)) 
    as differenza 
    from nominativo 
    INNER JOIN orario ON nominativo.id = orario.nominativoid 
    WHERE nominativo = '
    $name' AND data_in_m between '$data_in' AND '$data_out'"
    ma non mi funziona
    se tralascio
    Codice PHP:
    WHERE nominativo '$name' AND data_in_m between '$data_in' AND '$data_out'"; 
    funziona, ma i dati sono non completi (in funzione alla selezione del form)

  8. #8
    e' una cosa bruttissima dare lo stesso nome della tabella ad un nome del campo ... non si capisce piu' alcun "piffero a vela" ...

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

  9. #9
    Utente di HTML.it L'avatar di ttcc
    Registrato dal
    Dec 2008
    Messaggi
    486
    hai ragione Piero.mac
    meglio così?

    Codice PHP:
    $sql_3 "select nominativo.*, 
    sum(if(istituto in('lavoro','ferie','malattia'),differenza,0)) - 
    sum(if(istituto = 'recuperi',differenza,0)) 
    as differenza 
    from name 
    INNER JOIN orario ON name.id = orario.nominativoid 
    WHERE nominativo = '
    $name' AND data_in_m between '$data_in' AND '$data_out'"

  10. #10
    no. Se cambi il nome della tabella devi cambiare anche il nome tabella nella select...

    $sql_3 = "select nominativo.*,

    penso ti convenga mettere la segnalazione degli errori di query perche' ne avresti dovuti ricevere e invece non ne fai cenno.

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

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.