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

    problema Query SQL (mySQL) per sommario

    Spero che questa sia la categoria corretta per postare problemi con database, ma non mi sembra di aver visto un forum apposito per i databae e l'sql. (spero di non sbagliarmi).

    Ma veniamo al sodo...

    Sto cercando di approfondire il linguaggio SQL e, facendo vari esperimenti, negli ultimi giorni mi sono imbattuto in un problema che non riesco a risolvere. Ve lo sottopongo sperando che qualcuno sappia darmi una mano.

    Con un database mySQL voglio gestire un sistema di quiz a domande (organizzate per categorie).
    In questo sistema ho principalmente due tabelle, una che si occupa di memorizzare tutte le categorie possibili ( chiamata "qz_categories" ) e un'altra che si occupa di memorizzare tutte le domande ( "qz_questions" ).

    Vi riporto i campi più significativi di ogni tabella per una maggiore comprensione
    ______________________________________

    qz_categories: id, name
    qz_questions: id, text, category_id
    ______________________________________

    dove qz_questions.category_id è un riferimento all'id della categoria a cui appartiene la specifica domanda.

    Adesso veniamo al problema vero e proprio.
    Vorrei creare una sorta di sommario che mostri i nomi di tutte le categorie e per ognuna di esse il numero di domande che appartengono a quella categoria.

    Ho risolto parzialmente il problema con la seguente query:

    codice:
    SELECT qz_categories.id, qz_categories.name, COUNT(qz_questions.category_id) as total
    FROM qz_questions, qz_categories
    WHERE qz_questions.category_id = qz_categories.id
    GROUP BY qz_categories.id
    tale query mi da un risultato del genere

    codice:
    id 	name 				total
    --------------------------------------
    1	Sport				 7
    3	Scienze				3
    4	Letteratura e Lingue	    6
    5	Musica e Arte		      4
    6	Storia e Geografia	     5
    7	Calcolo				 8

    Qual'è il problema?
    Il problema è che esistono altre due categorie che non hanno alcuna domanda e quindi vorrei che apparissero con valore totale uguale a zero.

    Come fare?!


    Grazie a tutti in anticipo!

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    Un modo potrebbe essere questo:
    codice:
    SELECT qz_categories.id, qz_categories.name, COUNT(qz_questions.category_id) as total
    FROM qz_categories LEFT JOIN qz_questions ON (qz_questions.category_id = qz_categories.id)
    GROUP BY qz_categories.id
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3

    ;)

    Grazie mille!

    Velocissimo!

    Onestamente non conoscevo la sintassi del join! Corro a studiarmela!

    Grazie ancora!

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