Newsgroup: it.comp.www.php
Titolo: Query complessa (o forse no?)

Premetto che sono utilizzo MySQL e PHP da pochissimo, ho cercato risposte
sui NG ma non ho trovato nulla che facesse al caso mio.
C'è un sondaggio semplice con una domanda. Ogni utente che vota dichiara la
sua provenienza, per semplificare diciamo "Abruzzo", "Lombardia", "Sicilia".
Il voto può essere 1, 2 o 3.
Con una query voglio estrarre 3 righe (le 3 regioni) con le seguenti
colonne:
1) il nome della regione (ovvio), lo faccio con GROUP BY
2) il conto totale delle persone che hanno votato di quella specifica
regione (lo faccio con COUNT)
3) il conto totale delle persone che hanno votato 1 di quella specifica
regione
4) il conto totale delle persone che hanno votato 2 di quella specifica
regione
5) il conto totale delle persone che hanno votato 3 di quella specifica
regione
Ho problemi con i punti 3, 4, 5.
Con una query sono riuscito a raggruppare i voti per regione e ad indicare i
voti totali, ma per tirare fuori i soli totali di voti 1, 2, o 3 non mi
viene in mente nient'altro che usare la clausola WHERE che ovviamente non va
bene in questo caso...
Chi mi aiuta?
Buona settimana a tutti,
Stefano

 ha scritto nel messaggio
news:l%E2b.265632$lK4.8...@twister1.libero.it...

Tabella voti
campi: regione, persona, voto
SELECT regione, COUNT(persona), voto FROM voti GROUP BY regione, voto
dovrebbe fare quello che cerchi, ovviamente no ti da il totale per
regione.... ma quelo lo avevi nella query prima!

 Chi mi aiuta?
usa SUM (voto='1') as Voto1 SUM(voto='2')AS Voto2 SUM(voto='3') AS Voto3 
nella select.
Ciao Gianfranzo
-- 
ICQ#: 21258924
Nick Gianfranzo
Home page 
http://www.gianfranzo.it
Gianfranzo è contro la guerra

 nella select.
Ci avevo pensato anch'io ma SUM mi somma i voti, io voglio sapere le
persone! Se tre persone della Lombardia hanno votato 2 e una ha votato 3 SUM
mi restituisce 9, invece i dati che mi servono sono:
- il numero di persone della Lombardia che hanno votato 2 (in questo caso 3)
- il numero di persone della Lombardia che hanno votato 3 (in questo caso 1)
Bye,
Stefano

 regione.... ma quelo lo avevi nella query prima!
Non funziona. Io vorrei nella stessa query tutte le colonne che ho detto
nella prima mail... ci dev'essere un modo per farlo! :-(
Grazie lo stesso,
Stefano


Se usi una versione di mysql maggiore del 4 puoi fare una union delle due
query

Ciao,
Nuanda wrote:

dipende da come hai scritto la query:
SELECT Regione,(SUM(Voto='1')) AS Voto1, (SUM(Voto='2')) AS Voto2, 
(SUM(Voto='3')) AS Voto3
FROM voti
GROUP BY Regione
questa funziona
la tabella č voti con 3 campi: IDVoto, Regione, Voto
e il contenuto demo che ho inserito č il seguente:
IDVoto,Regione,Voto,
1,Abruzzo,1,
2,Lombardia,2,
3,Sicilia,3,
4,Abruzzo,2,
5,Sicilia,3,
6,Lombardia,1,
7,Sicilia,1,
8,Abruzzo,2,
9,Abruzzo,3,
10,Sicilia,3,
il risultato della query č:
Regione,Voto1,Voto2,Voto3,
Abruzzo,1,2,1,
Lombardia,1,1,0,
Sicilia,1,0,3,
che č corretto se ho capito bene cosa vuoi fare.
Ciao Gianfranzo
-- 
ICQ#: 21258924
Nick Gianfranzo
Home page 
http://www.gianfranzo.it
Gianfranzo č contro la guerra

> news:bifabo$8m1eu$4...@ID-201944.news.uni-berlin.de...
mi sono dimenticato che volevi sapere anche il numero totale dei voti 
per regione:
SELECT Regione,(SUM(Voto='1')) AS Voto1, (SUM(Voto='2')) AS Voto2, 
(SUM(Voto='3')) AS Voto3, count(Voto) AS TotaleVoti
FROM voti
GROUP BY Regione
Ciao Gianfranzo
-- 
ICQ#: 21258924
Nick Gianfranzo
Home page 
http://www.gianfranzo.it
Gianfranzo è contro la guerra

 - il numero di persone della Lombardia che hanno votato 3 (in questo caso 1)
hai sbagliato SUM somma gli argomenti:
se l'argomento è un test voto='1' sarà somma di tanti 1 quanti sono i 
voti = 1 (che dà per risultato 1 se è vero, 0 se falso e così per gli 
altri test...)
SUM (voto) fa quello che dici tu.


 SUM (voto) fa quello che dici tu.
Ok, funziona perfettamente :-) ti ringrazio davvero!
Solo una cosa: come facevi a sapere questa cosa? La documentazione ufficiale
di mysql liquida SUM con poche righe, altro che 1 vero, 0 falso!
Sbaglio io a documentarmi? Oppure è un uso talmente raro di SUM che nessuno
ne parla?
Bye,
Stefano

 ne parla?
nella descrizione delle funzioni c'è sempre la sintassi specifica, saper 
leggere un manuale non significa leggere la descrizione informale... 
all'università mi hanno insegnato anche a leggere i manuali :)
comunque una qualsiasi guida seria di SQL standard è sufficiente, poi 
tanto lavoro e relativa esperienza, e lo sforzo di far fare ad ogni 
parte di un progetto web il suo lavoro: il client, il Server web e  il 
server DB (sulle architetture web minimali):)
