Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    68

    [MySQL] GROUP BY su due query unite con UNION

    Sto creando delle statistiche dinamiche per il CMS che ho creato da qualche settimana sul mio sito, in particolare vorrei sapere chi è stato l'utente che ha scritto più articoli (e quanti) nella settimana passata.

    Questa è la query che ho provato a scrivere, ma non dà i risultati attesi. La query innanzitutto unisce (con UNION) le righe estratte dalla query eseguita sul database degli articoli attivi (che seleziona l'autore e il numero di righe) con le righe estratte da un'altra query fatta sul database degli articoli archiviati (nel caso sia stata fatta un'archiviazione durante la settimana). Le colonne dell'autore hanno lo stesso nome (added_by) in entrambe le tabelle. Il GROUP BY raggruppa i vari autori, dopodichè ordino in ordine decrescente il risultato del GROUP BY sul secondo campo selezionato ed estraggo la prima riga. In questo modo dovrebbe restituirmi il "massimo". Forse mi sfugge qualcosa. Dove sbaglio?

    codice:
    SELECT author, COUNT(*) AS count FROM ((SELECT added_by AS author, COUNT(*) AS numnews FROM '.PREFIX.'news) UNION (SELECT added_by AS author, COUNT(*) AS numarchived FROM '.PREFIX.'archivednews a)) AS tmptable GROUP BY author ORDER BY 2 DESC LIMIT 1;

  2. #2
    Che risultati ti dà? tutti a 0 o null?

    Credo manchi un GROUP BY nelle due SELECT che poi unisci.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    68
    Intanto grazie per la risposta

    Ho aggiunto i GROUP BY e tolto il LIMIT 1 per testare, e come risultato ottengo una lista di tutti gli autori a cui però è associato un solo articolo (ho controllato e non è così). Questa la query completa:

    codice:
    SELECT author, COUNT(*) AS count FROM ((SELECT added_by AS author, COUNT(*) AS count FROM pm_news GROUP BY added_by) UNION (SELECT added_by AS author, COUNT(*) AS count FROM pm_archivednews GROUP BY added_by)) AS tmptable GROUP BY author ORDER BY 2 DESC LIMIT 1;
    Non capisco dove possa essere l'errore...

    EDIT - Dimenticavo: non ho aggiunto la condizione WHERE per la data, ma non è quello il problema per ora.

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Unisci le due tabelle e raggruppa direttamente su quella.

    codice:
    select author,count(*) as total from (  
    select added_by as author from pm_news
    union all
    select added_by from pm_archivednews
    ) as t
    group by author

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.