Visualizzazione risultati 1 fino 18 di 18

Discussione: Union select

  1. #1
    L'avatar di fantacalciojarno
    fantacalciojarno non è connesso Utente giovane
    Data registrazione
    31-12-2010
    Messaggi
    89

    Predefinito Union select

    Buonasera,
    e scusate l'ignoranza,ho 2 queri su 2 file separati che fanno esattamente quello che dovrebbe fare, ora io volevo unire le select con UNION ma non so perchè non va... un aiutino perfavore?
    Codice PHP:
    <?php
    $query
    = " SELECT SUM(gol_casa) AS tot FROM scontri WHERE sq_casa='sq1' ";
    $result = mysql_query($query);
    $row = mysql_fetch_assoc($result);
    echo
    $row ['tot'] ;
    ?>
    Codice PHP:
    <?php
    $query
    = " SELECT SUM(gol_fuori) AS tot2 FROM scontri WHERE sq_fuori='sq1' ";
    $result = mysql_query($query);
    $row = mysql_fetch_assoc($result);
    echo
    $row ['tot'] ;
    ?>
    Ho provato cosi:
    Codice PHP:
    <?php
    $query
    = " SELECT SUM(gol_casa) AS tot FROM scontri WHERE sq_casa='sq1' UNION SELECT SUM(gol_fuori)AS tot2 FROM scontri WHERE sq_fuori='sq1' ";
    $result = mysql_query($query);
    $row = mysql_fetch_assoc($result);
    echo
    $row ['tot'] ;
    ?>
    Mi stampa $row ['tot'] correttamente ma $row ['tot'2] invece no....dov'è che sbaglio???

  2. #2
    Guest

    Predefinito

    Nello stampare $row['tot2'] hai comunque scritto $row['tot']

  3. #3
    L'avatar di fantacalciojarno
    fantacalciojarno non è connesso Utente giovane
    Data registrazione
    31-12-2010
    Messaggi
    89

    Predefinito

    Non capisco se la tua è una domanda, cmq ho provato sia singolarmente che con tutti e 2 ad ogni modo funziona solo la row tot, il tot2 non lo visualizzo nemmeno se lo chiamo da solo sembra NULL ma non lo è

  4. #4
    Guest

    Predefinito

    Codice PHP:
    <?php
    $query
    = " SELECT SUM(gol_casa) AS tot FROM scontri WHERE sq_casa='sq1' UNION SELECT SUM(gol_fuori)AS tot2 FROM scontri WHERE sq_fuori='sq1' ";
    $result = mysql_query($query);
    $row = mysql_fetch_assoc($result);
    echo
    $row ['tot'] ;
    ?>
    Questa è la funzione che usi no? Non vedo in alcun punto di questa funziona un "echo $row ['tot2'];", stesso dicasi di tutte le precedenti che hai postato.

  5. #5
    L'avatar di fantacalciojarno
    fantacalciojarno non è connesso Utente giovane
    Data registrazione
    31-12-2010
    Messaggi
    89

    Predefinito

    Forse l'ho presa un po larga cmq lo script incriminato è questo:
    Codice PHP:
    <?php
    $query
    = " SELECT SUM(gol_casa) AS tot FROM scontri WHERE sq_casa='sq1' UNION SELECT SUM(gol_fuori)AS tot2 FROM scontri WHERE sq_fuori='sq1' ";
    $result = mysql_query($query);
    $row = mysql_fetch_assoc($result);
    echo
    $row ['tot'] ;
    echo
    $row ['tot2'];
    ?>
    Credevo fosse nella primo post che ho postato evidentemente perso nei vari smanettamenti 'echo $row ['tot2'];'
    Ultima modifica di fantacalciojarno : 21-11-2012 alle ore 20.40.47

  6. #6
    Guest

    Predefinito

    Ah ecco! Mi sono informato meglio sulla funzione UNION, che ammetto di conoscere ma non avere mai usato, e credo che non sia la più adatta per le tue esigenze... e rileggendo bene la questione, stai facendo un UNION fra le stesse tabelle, dato che unisci "scontri" con "scontri"... Proverei così:

    Codice PHP:
    <?php
    $query
    = " SELECT SUM(gol_casa) AS tot1, SUM(gol_fuori) AS tot2 FROM scontri WHERE sq_casa='sq1' OR sq_fuori='sq1' ";
    $result = mysql_query($query);
    $row = mysql_fetch_assoc($result);
    echo
    $row ['tot'] ;
    echo
    $row ['tot2'] ;
    ?>

  7. #7
    L'avatar di fantacalciojarno
    fantacalciojarno non è connesso Utente giovane
    Data registrazione
    31-12-2010
    Messaggi
    89

    Predefinito

    Sicuramente non sara' il modo migliore ma faccio quello che posso con le conoscenze che ho, poi un giorno l'aggiornero' magari. Cmq il codice che hai postato tu non va bene, ci avevo gia' provato anch'io, in quel modo le somme sono sbagliate perchè dovrei avere la somma tot1 dove (where)sq_casa=sq1 se metto OR mi calcola anche campi che non dovrebbe.
    La condizione dovrebbe essere la prima SOLO per il sum(gol_casa) e la seconda SOLO per il sum(gol_fuori). Non so se sono stato sufficientemente chiaro ma il risultato è che non funziona.

  8. #8
    Guest

    Predefinito

    Se vuoi metterla giù semplice, lanci due query e tagli la testa al toro, ma volendo evitare la situazione, vediamo di ragionarci un attimo su.

    Potresti provare con un SELF-JOIN, fai così:

    Codice PHP:
    <?php
    $query
    = "SELECT SUM(scontri.gol_casa) AS tot1, SUM(scontri.gol_fuori) AS tot2 FROM scontri JOIN scontri ON scontri.sq_fuori='sq1' WHERE scontri.sq_casa='sq1'";
    $result = mysql_query($query);
    $row = mysql_fetch_assoc($result);
    echo
    $row['tot'] ;
    echo
    $row['tot2'] ;
    ?>

  9. #9
    L'avatar di fantacalciojarno
    fantacalciojarno non è connesso Utente giovane
    Data registrazione
    31-12-2010
    Messaggi
    89

    Predefinito

    Cosi come l'hai postato te non da alcun risultato. Ma questo on?

  10. #10
    Guest

    Predefinito

    http://it.wikipedia.org/wiki/Join_%28SQL%29

    effettivamente mi sono reso conto di aver scritto una baggianata sopra XD
    Confesso di aver finito le idee XD riesco a risolverlo solo usando due query...

  11. #11
    L'avatar di fantacalciojarno
    fantacalciojarno non è connesso Utente giovane
    Data registrazione
    31-12-2010
    Messaggi
    89

    Predefinito

    Usiamo 2 query JOIN lo conosco ma mi crea sempre un sacco di problemi, ma a grandi linee il codice che hai postato te l'ho capito.. non ricordo l' ON per cosa stava. Facciamo uno prova?

  12. #12
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Non ho letto tutta la discussione ma...
    Quando fai la union ti farà due tuple "righe"
    Quindi devi chiamare tutte e due le somme con alias 'tot' e per visualizzarle devi passare al record successivo.
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  13. #13
    L'avatar di fantacalciojarno
    fantacalciojarno non è connesso Utente giovane
    Data registrazione
    31-12-2010
    Messaggi
    89

    Predefinito

    In che senso che devo passare al record successivo?

  14. #14
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Select 'uno' as pippo from tabella1
    UNION
    SELECT 'due' as pippo from Tabella2

    Da come risultato
    | pippo
    -------------
    1| uno
    2| due

    Quindi quando carichi i dati avrai un risultato su DUE righe non due colonne.
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  15. #15
    Guest

    Predefinito

    Prova così:

    Codice:
    <?php 
    $query = " SELECT SUM(case when sq_casa='sq1' then gol_casa else 0 end) AS tot_gol_casa,SUM(case when sq_fuori='sq1' then gol_fuori else 0 end) AS tot_gol_fuori FROM scontri WHERE sq_casa ='sq1' or sq_fuori='sq1' "; 
    $result = mysql_query($query); 
    $row = mysql_fetch_assoc($result); 
    echo $row ['tot_gol_casa'] ; 
    echo $row ['tot_gol_fuori'] ; 
    ?>
    Ciao
    Mik

  16. #16
    L'avatar di fantacalciojarno
    fantacalciojarno non è connesso Utente giovane
    Data registrazione
    31-12-2010
    Messaggi
    89

    Predefinito

    Che spettacolo questa query...
    e funziona alla grande...ma perchè 'else 0 end' ? Per cosa sta esattamente?
    Vi ringrazio tutti qunti!

    Alla stessa maniera ho provato a fare altro, ma perchè questa funziona perfettamente
    Codice PHP:
    $query = "SELECT SUM(case when sq_casa='sq2' and segno='1' then segno else 0 end)as vitc,SUM(case when sq_fuori='sq2' and segno='2' then segno else 0 end)as vitf FROM scontri ";
    ..e invece questa no?

    Codice PHP:
    $query = "SELECT SUM(case when sq_casa='sq2' and segno='x' then segno else 0 end) as pari_casa,SUM(case when sq_fuori='sq2' and segno='x' then segno else 0 end) as pari_fuori FROM scontri ";
    Ultima modifica di fantacalciojarno : 24-11-2012 alle ore 23.14.11

  17. #17
    Guest

    Cool

    Bella lì....

    per la tua query

    Codice:
    $query = "
    SELECT 
    SUM(case when sq_casa='sq2' and segno='x' then segno else 0 end) as pari_casa,
    SUM(case when sq_fuori='sq2' and segno='x' then segno else 0 end) as pari_fuori 
    FROM scontri ";
    non va bene perchè negli altri casi, il valore da sommare è numerico, in questo caso "segno" è formato testo ("x")

    Nel caso di gol_casa/gol_fuori, il valore è numerico ed inoltre può essere maggiore di 1, quindi la Sum() è la somma dei relativi valori e non un conteggio.

    Per la query segno "x" credo vada bene un semplice conteggio. Quindi puoi modificare la query in questo modo:

    Codice:
    $query = "
    SELECT 
    SUM(case when sq_casa='sq2' and segno='x' then 1 else 0 end) as pari_casa,
    SUM(case when sq_fuori='sq2' and segno='x' then 1 else 0 end) as pari_fuori 
    FROM scontri ";
    Ciauee
    Mik
    Ultima modifica di HolidaySoft : 25-11-2012 alle ore 14.14.32

  18. #18
    L'avatar di fantacalciojarno
    fantacalciojarno non è connesso Utente giovane
    Data registrazione
    31-12-2010
    Messaggi
    89

    Predefinito

    Ahh quindi dopo 'then' ci va messo il valore che voglio sommare e '0 end' è il valore che do se la condizione nn è rispettata se ho capito bene..cmq nemmeno il codice che hai postato da ultimo per i pareggi funziona!

    ERRORE MIO..funziona!!! ma è come ho detto su?
    Ultima modifica di fantacalciojarno : 25-11-2012 alle ore 18.13.44

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •