Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Discussione: [Mysql] Join e count..

  1. #1

    [Mysql] Union e count..

    ho una tabella categorie con chiave id
    ho una tabella files con campo cid = categorie.id

    Voglio sapere quanti files ci sono per ogni categoria, quindi:

    SELECT c.id, count(f.cid) AS count
    FROM `categorie` AS c
    JOIN files AS f On f.cid =c.id
    GROUP BY f.cid

    questa funziona bene ovviamente... l'unico problema: vorrei includere nel risultato anche le categorie per cui non è ancora presente alcun file...

    ovvro non solo:

    ID | count
    1 | 4
    2 | 2
    5 |7

    ma anche:

    ID | count
    1 | 4
    2 | 2
    3 | 0
    4 |0
    5 |7

    posso benissimo fare lato php: per ogni categoria faccio una ulteriore query... ma volevo ottimizzare un pochino..
    Ci sto pensando da mezz'ora (vergognandomi per aver preso 30 al laboratorio di basi di dati appena un anno fa ) ma non ne vengo a capo.
    Teoricamente mi servirebbe una UNION che aggiunga all'insieme di sopra le categorie non associate a nessun file.. queste penso che riuscirei anche ad ottenere in qualche modo (tutte le categorie, meno quelle restituite della prima query)... il problema è che la UNION si aspetta di avere lo stesso numero di colonne.. come fo'? Sbaglio starda? Non si può fare?

    piero.maaaac... aiutami tuuuu


  2. #2
    SELECT c.id, count(f.cid) AS count
    FROM `categorie` AS c
    LEFT OUTER JOIN files AS f On f.cid =c.id
    GROUP BY f.cid




    Kaworu.it
    Bookmarks on line i tuoi preferiti ovunque
    il tempo è il miglior dottore.....solo che è parecchio lento ...troppo lento
    wxKonTEXT Editor di testi(linux, win e mac), new version

  3. #3
    Mumble... questa mi restituisce solo la prima categoria (che poi ha count 0).. non mi restituisce nè le altre categorie che hanno count a 0, nè quelle che hanno count > 0 :master:

  4. #4
    codice:
    SELECT c.id, count(f.cid) AS count
    FROM `categorie` AS c
    JOIN files AS f On f.cid =c.id
    GROUP BY f.cid
    UNION
    SELECT c.id, count(f.cid) AS count
    FROM `categorie` AS c
    LEFT JOIN files AS f On f.cid = c.id
    WHERE f.cid IS NULL
    GROUP BY c.id
    La prima query e' corretta ma non precisa. Siamo d'accordo che raggruppi per categorie, ma vai a pescare il valore del raggruppamento nella tabella files. E' lo stesso, ma non e' lo stesso se nella tabella files il c.id non esiste o per assurdo fosse errato. Il secondo count dara' zero(0), cosi' potrai identificare i record delle categorie senza files.

    Ti mando le coordinate bancarie in pvt....

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

  5. #5
    mi correggo.. quelle con count > 0me le da (avevo deletato alcune cose)... ma da solo la prima con count = 0 :master:

    sento che siamo sulla strada giusta, ma non so che cos'è quell'OUTER

  6. #6
    Originariamente inviato da piero.mac
    codice:
    SELECT c.id, count(f.cid) AS count
    FROM `categorie` AS c
    JOIN files AS f On f.cid =c.id
    GROUP BY f.cid
    UNION
    SELECT c.id, count(f.cid) AS count
    FROM `categorie` AS c
    LEFT JOIN files AS f On f.cid = c.id
    WHERE f.cid IS NULL
    GROUP BY c.id
    La prima query e' corretta ma non precisa. Siamo d'accordo che raggruppi per categorie, ma vai a pescare il valore del raggruppamento nella tabella files. E' lo stesso, ma non e' lo stesso se nella tabella files il c.id non esiste o per assurdo fosse errato. Il secondo count dara' zero(0), cosi' potrai identificare i record delle categorie senza files.

    Ti mando le coordinate bancarie in pvt....
    ecco... chiara la precisazione sulla prima query.. in effetti ci avevo pensato per un attimo mentre la scrivevo, ma poichè l'attenzione era su come ottenere il risultato finale e stavo facendo varie prove, non m'ero soffermato sul dettaglio

    Per la seconda... fregato da un where

    Ottimo, la provo.. ma ad occhio va

  7. #7
    Hi! grande kaworuskench ....

    ogni tanto ti fai vivo....

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

  8. #8
    Originariamente inviato da }gu|do[z]{®©
    Mumble... questa mi restituisce solo la prima categoria (che poi ha count 0).. non mi restituisce nè le altre categorie che hanno count a 0, nè quelle che hanno count > 0 :master:
    opps avevo copiato e incollato la tua con il gourp by tarocco

    SELECT c.id, count(f.cid) AS count
    FROM `categorie` AS c
    LEFT OUTER JOIN files AS f On f.cid =c.id
    GROUP BY c.id


    così dovrebbe funzicare
    Kaworu.it
    Bookmarks on line i tuoi preferiti ovunque
    il tempo è il miglior dottore.....solo che è parecchio lento ...troppo lento
    wxKonTEXT Editor di testi(linux, win e mac), new version

  9. #9
    Originariamente inviato da piero.mac
    Hi! grande kaworuskench ....

    ogni tanto ti fai vivo....
    oh my god
    Kaworu.it
    Bookmarks on line i tuoi preferiti ovunque
    il tempo è il miglior dottore.....solo che è parecchio lento ...troppo lento
    wxKonTEXT Editor di testi(linux, win e mac), new version

  10. #10
    Originariamente inviato da kaworuskench
    opps avevo copiato e incollato la tua con il gourp by tarocco


    pardon.. ho fatto confusione.. so' stanco... lavoro da 5-6 ore
    in compenso ho finito

    Pochi ritocchini facili facili domani, e poi batto cassa (e giro una percentuale a tutti e due )

    Giusto per chiarezza:
    LEFT mette a sinistra la tabella sulla quale agganci l'altra, giusto?
    E OUTER gli impone di riempire comunque la tabella risultante con valori nulli per le tuple mancanti della seconda... giusto? qualcosa del genere no?
    Mai visto Outer all'uni

    Gracias!

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.