Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    mysql order senza group

    Salve sono ancora alle prese con una query mysql!
    Il problema è questo ho una pagina web di questo tipo:

    Cliente: Mario Rossi
    fattura: 1 100
    fattura: 2 50
    fattura: 3 80
    Totale cliente: 230

    che visualizza a video tutti i clienti caricati in una tabella formata dai campi:
    Cliente, Fattura, Importo
    in ordine di totale fatture per ogni cliente (pagina che funziona regolarmente).
    Il problema è che devo esportare i dati di dettaglio excel con lo stesso ordine con cui appaiono a video ma se nella query faccio un 'ORDER BY Importo' senza usare la funzione GROUP ho l'ordinamento per ogni singola fattura e non per totali al contrario se faccio un 'GROUP BY Cliente ORDER BY SUM(Importo)' ottengo l'ordinamento corretto ma esporto solo una riga per clliente e non il dettaglio fatture.

    Esiste una query che mi permetta di avere l'estrazione di dettaglio con il coretto ordianamento?
    Grazie a tutti

  2. #2
    group by cliente, fattura
    order by cliente, fattura

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

  3. #3
    ma io devo ordinare per l'importo totale fatture che ha ogni cliente non per il nominativo del cliente

  4. #4
    Originariamente inviato da claudio1453
    ma io devo ordinare per l'importo totale fatture che ha ogni cliente non per il nominativo del cliente
    ordina per quello che ti serve. Non e' un problema.

    aspetta... tu devi anche contare i soldini. allora la cosa cambia. Non puoi raggruppare una cosa ed avere nello stesso tempo la lista.

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

  5. #5
    esatto è proprio quello il problema dovrei ordinare per l'importo totale per ogni cliente ma mantanere comunque il dettaglio di ogni fattura stavo pensando a una subquery ma finora non sono riuscito

  6. #6
    la query nella pagina com'è adesso che funziona?
    Ciao!

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    70
    non so se ho capito, tu vorresti una cosa del genere?

    codice:
     
    cliente  fattura  importo tot
    Mario Rossi	1	50	190
    Mario Rossi	2	100	190
    Mario Rossi	3	40	190
    Luca Zeppi	1	40	240
    Luca Zeppi	2	30	240
    Luca Zeppi	3	70	240
    Luca Zeppi	4	100	240
    Sandro Pilo	1	45	245
    Sandro Pilo	2	200	245
    se si utilizzerei una view:

    CREATE VIEW tab1 AS
    SELECT cliente,SUM(importo) as totale
    FROM tabella
    GROUP BY cliente
    ORDER BY totale

    e poi:

    SELECT cliente, fattura, importo, totale
    FROM tab1 NATURAL JOIN tabella

  8. #8
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Visto che la domanda riguarda esclusivamente mysql ho spostato nell'apposita sezione.

    Io risolverei così

    codice:
    create table `fatture` (
      `id` int(11) not null auto_increment,
      `id_fattura` int(11) default null,
      `cliente` varchar(50) default null,
      `importo` int(11) default null,
      primary key (`id`)
    ) engine=myisam auto_increment=9 default charset=latin1;
    
    insert into `fatture`(`id`,`id_fattura`,`cliente`,`importo`) values 
    (1,1,'mario',10),
    (2,2,'mario',20),
    (3,3,'giovanni',5),
    (4,4,'mario',30),
    (5,5,'luca',50),
    (6,6,'luca',40),
    (7,7,'andrea',5),
    (8,8,'andrea',7);
    
    select if(id is null,concat('Totale ',cliente),cliente) as cliente,
    if(id is null,'',id_fattura) as id_fattura,
    if(id is null,'',importo) as importo,
    totale from (
    select p.*,t.* from (
    select id,id_fattura,importo,cliente,sum(importo) as totale
    from fatture
    group by cliente,id with rollup) as t
    inner join (select cliente as cli,sum(importo) as tot from fatture group by cliente) as p
    on t.cliente = p.cli) as c
    order by tot,isnull(id),id_fattura

  9. #9
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Mi sono accorto di un errore di visualizzazione nel caso di totali uguali. risolvibile così

    order by tot,cli,isnull(id),id_fattura

  10. #10
    @civre esatto è proprio quello il risultato che dovrei ottenere

    @nicola75ss la tua query è veramente molto complessa sto studiandola in particolare che vuol dire la parte 'select p.*,t.*' ?

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 © 2026 vBulletin Solutions, Inc. All rights reserved.