Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 38
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    208

    [Mysql] problema con left join multipla

    Salve,

    Ho un database con una tabella utente alla quale sono collegate diverse tabelle esterne tramite id con degli importi di vario tipo.

    Devo fare una query unitaria che mi richiami alcune voci di anagrafica dalla tabella utente e mi consenta di avere a disposizione questi importi da sommare e sottrarre tramite opportuna funzione php ed estrapolare un importo dovuto.

    La query che passo sotto funziona, il problema è che anzichè farmi il totale delle quote collegate, mi spara il totale delle intere tabelle dei vari importi...

    Qualcuno può buttare un occhio e darmi una mano? Grazie!

    Codice PHP:
    SELECT cognomenomeSUMquota ) AS totale_quoteSUMimporto ) AS totale_dareSUMcifra ) AS totale_dato
    FROM anammi
    .anagrafica
    LEFT JOIN anammi
    .quote_associative ON quote_associative.anagrafica_id
    LEFT JOIN anammi
    .quote_diverse ON quote_diverse.anagrafica_id
    LEFT JOIN anammi
    .quote_versate ON quote_versate.anagrafica_id
    WHERE anagrafica
    .id =
    Aggiungo il risultato della query:

    Codice PHP:
    cognome    nome    totale_quote   totale_dare   totale_dato 
    Tizio       Caio       14992          96           12000 
    Ultima modifica di Korenaar; 12-05-2014 a 19:36 Motivo: aggiunta del risultato

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    sei sicuro che left join funzioni in quel modo?

    io proverei cosi:
    LEFT JOIN anammi.quote_associative ON quote_associative.anagrafica_id=anammi.anagrafica_ id
    ....
    Ultima modifica di 123delphi321; 12-05-2014 a 19:51

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    208
    mmm...il totale cambia, ma non coincide purtroppo. Ma la tua osservazione era giusta in effetti, a furia di incastrare colonne mi si erano incrociati gli occhi. Probabilmente c'è proprio un errore di impostazione della query

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2014
    residenza
    Genova, presenza costante a Milano
    Messaggi
    100
    Sì perché se quote_associative.anagrafica_id è != 0 risulterà sempre vero e quindi farà un prodotto cartesiano su tutte le tabelle...

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    208
    Quote Originariamente inviata da razzoli Visualizza il messaggio
    Sì perché se quote_associative.anagrafica_id è != 0 risulterà sempre vero e quindi farà un prodotto cartesiano su tutte le tabelle...
    Non ho ben capito cosa intendi...

    L'ho modificata così, ma questo 14mila e rotti che esce è un numero che s'inventa completamente. E' forse il prodotto che dici tu? Facendo la somma totale senza intrecci, il totale dell'intera tabella è 3748, il totale utente scelto (fittizio, sono dati di prova) è 3625

    SELECT cognome, nome, SUM(quota) AS totale_quote_associative, SUM(importo) AS totale_quote_div, SUM(cifra) AS totale_versamenti
    FROM anammi.anagrafica
    left JOIN anammi.quote_associative ON quote_associative.anagrafica_id = anagrafica.id
    left JOIN anammi.quote_diverse ON quote_diverse.anagrafica_id
    left JOIN anammi.quote_versate ON quote_versate.anagrafica_id


    WHERE anagrafica.id=1;



  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2014
    residenza
    Genova, presenza costante a Milano
    Messaggi
    100
    Il prodotto cartesiano tra una tabella A e una B sono tutte le possibili combinazioni. Se A ha 10 righe e B ha 10 righe, il prodotto cartesiano sono 100 righe.

    Nel tuo caso era un prodotto cartesiano perché dicevi: ON id. Se id è 0 (ma con le impostazioni di default non può succedere) la ON risulta sempre vera, quindi MySQL non esclude nessuna riga e fa un prodotto cartesiano.

    La query che hai postato è ancora sbagliata: hai corretto solo la prima ON.

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    208
    Quote Originariamente inviata da razzoli Visualizza il messaggio
    Il prodotto cartesiano tra una tabella A e una B sono tutte le possibili combinazioni. Se A ha 10 righe e B ha 10 righe, il prodotto cartesiano sono 100 righe.

    Nel tuo caso era un prodotto cartesiano perché dicevi: ON id. Se id è 0 (ma con le impostazioni di default non può succedere) la ON risulta sempre vera, quindi MySQL non esclude nessuna riga e fa un prodotto cartesiano.

    La query che hai postato è ancora sbagliata: hai corretto solo la prima ON.
    Niente, devo essere stanco proprio se ho ripostato quella sbagliata...


    SELECT cognome, nome, SUM(quota) AS totale_quote_associative, SUM(importo) AS totale_quote_div, SUM(cifra) AS totale_versamenti
    FROM anammi.anagrafica
    left JOIN anammi.quote_associative ON quote_associative.anagrafica_id = anagrafica.id
    left JOIN anammi.quote_diverse ON quote_diverse.anagrafica_id = anagrafica.id
    left JOIN anammi.quote_versate ON quote_versate.anagrafica_id = anagrafica.id


    WHERE anagrafica.id=1;


    Il risultato però non è cambiato di una virgola.

    Io ho sempre avuto una sola riga, sono i totali dentro che sono tremendamente fuori bersaglio, e non capisco da dove prenda questi numeri.

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2014
    residenza
    Genova, presenza costante a Milano
    Messaggi
    100
    E' questo il punto. Quella riga sono valori CALCOLATI in base a tante altre righe (nelle trabelle quote_*). Ma queste righe probabilmente sono sbagliate. Togli i vari SUM per capire quali sono queste righe.

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    208
    Ora provo, ma considera che a me servono le SUM....per cui prima o poi (magari nel modo giusto) dovrò reinserirle.
    Io non ho postato la struttura del db perchè mi sembra abbastanza chiara e lineare nonostante i nomi dei campi...ma se può servire lo faccio. Sto uscendo un pò scemo da questa cosa, ma se aggancio il funzionamento probabilmente non avrò più grossi problemi in futuro con query complesse.

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2014
    residenza
    Genova, presenza costante a Milano
    Messaggi
    100
    Infatti non è una soluzione, è un consiglio per il debug. Quando la query di base sarà giusta, avrà senso fare le somme

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.