Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2013
    Messaggi
    177

    Unire due query sulla stessa tabella

    Salve a tutti vi pongo il mio problema
    Ho una tabella i cui i campi sono
    Id squadraricevente squadraavente milionispesi

    Bene vorrei che si riuscisse a calcolare sia i milioni spesi da ogni singola squadra che ogni milione ricavato da ogni singola squadra giocandi quibdi sempre con il campo milioni
    mi hanno detto di utilizzare la funzione union ma nn riesco a utilizzarla mi sapete aiutare grazie

  2. #2
    SELECT SquadraRicevente AS Squadra, SUM(MilioniSpesi) AS Somma FROM Tabella GROUP BY SquadraRicevente
    UNION
    SELECT SquadraAvente AS Squadra, SUM(MilioniSpesi) AS Somma FROM Tabella GROUP BY SquadraAvente

    (ma "Avente" e "Ricevente" non sono la stessa cosa? Chi è che "dà"?)

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2013
    Messaggi
    177
    allora avente e ricevente sono due squadre diverse e queste due squadre me le vado a prendere da un altra tabella tramite un left join in pratica la mia query e questa :


    $result=mysql_query("select squadre.id,squadre.nome,squadre.logo,squadre.logn, squadre.nazione,mercato.milioni,
    SUM(mercato.milioni) as mil,
    COUNT(mercato.squadrea) as ca,
    COUNT(mercato.squadreda) as cs
    FROM squadre LEFT JOIN mercato ON squadreda = squadre.id GROUP BY squadre.id,squadre.nome,squadre.logo,squadre.nazio ne Order by mil DESC LIMIT $from, $max_results ");

    come la faccio ad integrare con una union?

  4. #4
    mi intrigava la differenza semantica: in una transazione c'è chi dà e chi riceve, qui invece c'è chi ha e chi riceve; quello che ha è quello che dà?

    comunque, l'esempio della UNION te l'ho fatto, prepara due SELECT e metti la parolina magica UNION in mezzo

    prima query UNION seconda query

    stando attento che le colonne restituite dalle due query abbiano lo stesso nome e siano dello stesso tipo (proprio come nel mio esempio).

    dai che ce la fai

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2013
    Messaggi
    177
    la mia query finale e questa
    "select squadre.id,squadre.nome,squadre.logo,squadre.logn, squadre.nazione,mercato.milioni,
    SUM(mercato.milioni) as mil,
    COUNT(mercato.squadrea) as ca
    FROM squadre LEFT JOIN mercato ON squadreda = squadre.id GROUP BY squadre.id,squadre.nome,squadre.logo,squadre.nazio ne Order by mil DESC LIMIT $from, $max_results
    UNION
    select squadre.id,squadre.nome,squadre.logo,squadre.logn, squadre.nazione,mercato.milioni,
    SUM(mercato.milioni) as mil,
    COUNT(mercato.squadrea) as ca
    FROM squadre LEFT JOIN mercato ON squadrea = squadre.id GROUP BY squadre.id,squadre.nome,squadre.logo,squadre.nazio ne Order by mil DESC LIMIT $from, $max_results");

    se ci fai caso nella prima ce il left join ... on squadreDA (che sarebbe la squadra che da i soldi )
    nel secondo left join ce squadreA (Che riceve i soldi )
    se io le metto tt e due vicine con la union
    mi da il solito errore mysql supplement in argument
    ma se le faccio funzionare una alla volta senza union mi funzionano entrambe !! e questo che non riesco a risolvere

  6. #6
    prova a togliere le order by, e poi magari anche le limit

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2013
    Messaggi
    177
    graziemille per l'aiuto optime

    la mia query ora e senza errori ed e questa

    $result=mysql_query("select squadre.id,squadre.nome,squadre.logo,squadre.logn, squadre.nazione,mercato.milioni,
    SUM(mercato.milioni) as mil,
    COUNT(mercato.squadrea) as ca
    FROM squadre LEFT JOIN mercato ON squadreda = squadre.id GROUP BY squadre.id,squadre.nome,squadre.logo,squadre.nazio ne
    UNION
    select squadre.id,squadre.nome,squadre.logo,squadre.logn, squadre.nazione,mercato.milioni,
    SUM(mercato.milioni) as mill,
    COUNT(mercato.squadreda) as caa
    FROM squadre LEFT JOIN mercato ON squadrea = squadre.id GROUP BY squadre.id,squadre.nome,squadre.logo,squadre.nazio ne");

    togliendo gli order by e limit mi funziona
    ma principalmente non mi restituisce i risultati della seconda query
    infatti io m i porto fuori i valori MILL e CAA ma mi esce sempre 0 come se svolgesse soltanto la prima query come fare?

  8. #8
    Utente di HTML.it L'avatar di MySQL
    Registrato dal
    May 2015
    Messaggi
    729
    Basta leggere il manuale per vedere come e quando usare UNION
    (sì lo so, sembra una cosa troppo scontata... ma è di certo la più furba)


    https://dev.mysql.com/doc/refman/5.0/en/union.html

    Attenzione a cambiare il "5.0" nella versione che utilizzi, non sempre le funzioni sono identiche (5.1, 5.5,5.6...)
    To use an ORDER BY or LIMIT clause to sort or limit the entire UNION result, parenthesize the individual SELECT statements and place the ORDER BY or LIMIT after the last one. The following example uses both clauses:
    (SELECT a FROM t1 WHERE a=10 AND B=1)
    UNION
    (SELECT a FROM t2 WHERE a=11 AND B=2)
    ORDER BY a LIMIT 10;

  9. #9
    prova anche con UNION ALL

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.