Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    UNION o JOIN? query su due tabelle

    Salve a tutti, dovrei ordinare i risultati estratti da un DB mysql in maniera un po' particolare e non vedo una strada semplice per la cosa.

    Ho in una tabella mysql chiamata "CLIENTI" la seguente struttura.
    Screenshot 2014-08-31 09.34.17.png
    Mentre ho altre due tabelle che si chiamano EFFETTUA e ACQUISTA con la struttura sottostante:
    EFFETTUA:
    Screenshot 2014-08-31 09.33.13.png
    Acquista:
    Screenshot 2014-08-31 09.31.52.png

    Il problema è quello di estrarre una lista di ID dei clienti ordinandoli in maniera decrescente in base a quello che spendono tra due date considerate (una sorta di WHERE data BETWEEN 'data1' AND 'data2').
    Come è possibile tale risultato?
    Seguendo la strada della union
    Codice PHP:
    SELECT id_cliente,costo FROM acquisto WHERE data BETWEEN 'data1' AND 'data2'
    UNION
    SELECT id_cliente
    ,costo FROM effettua WHERE data BETWEEN 'data1' AND 'data2' 
    Potrei ottenere il totale di un singolo cliente ma non un array ordinato.
    Come potrei impostare un join per tale risultato?
    Grazie

  2. #2
    SELECT * FROM
    (
    SELECT 'A' AS tipo, id_cliente, SUM(costo) AS Totale FROM acquisto WHERE data BETWEEN 'data1' AND 'data2' GROUP BY id_cliente
    UNION
    SELECT 'E' AS tipo, id_cliente, SUM(
    costo) AS Totale FROM effettua WHERE data BETWEEN 'data1' AND 'data2' GROUP BY id_cliente
    ) T1
    ORDER BY Totale


    facce sape'

  3. #3
    Quote Originariamente inviata da optime Visualizza il messaggio
    SELECT * FROM
    (
    SELECT 'A' AS tipo, id_cliente, SUM(costo) AS Totale FROM acquisto WHERE data BETWEEN 'data1' AND 'data2' GROUP BY id_cliente
    UNION
    SELECT 'E' AS tipo, id_cliente, SUM(
    costo) AS Totale FROM effettua WHERE data BETWEEN 'data1' AND 'data2' GROUP BY id_cliente
    ) T1
    ORDER BY Totale


    facce sape'
    questo ok ma non mi serve la distinzione tra effettua e acquisto. Gli utenti devono avere gli id_cliente ordinati in base alla somma di effettua e acquista.
    In questo modo ottengo una tabella con id_clienti doppi ordinati in base al totale maggiore diviso tra acquisto ed effettua

  4. #4
    Codice PHP:
    SELECT id_clienteSUM(Totale) AS tt_def FROM (SELECT 'A' AS tipoid_clienteSUM(costo) AS Totale FROM acquisto GROUP BY id_clienteUNIONSELECT 'E' AS tipoid_clienteSUM(costo) AS Totale FROM effettua GROUP BY id_clienteT1 GROUP BY id_clienteORDER BY tt_def DESC 
    Potrebbe essere corretta come interpretazione questa sopra?

  5. #5
    potrebbe. ma fai prima a provarla che chiedere a me

    facce sape'

  6. #6
    Quote Originariamente inviata da optime Visualizza il messaggio
    potrebbe. ma fai prima a provarla che chiedere a me

    facce sape'
    Va va grazie per la strada!

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.