estrazione in base al maggior numero di record
tizz
tizz non è online. Ultima attività: 29/04/2009 15.04.57tizz
il 14 marzo 2006 alle 17.58
76 messaggi dal 24 giugno 2005
in effetti il subject di questo post è davvero poco esplicativo, cercherò di spiegarmi meglio...

Ho 2 tabelle così strutturate:

CONCORRENTI
- IDconcorrente (contatore)
- nome (testo)
- sesso (testo)

VOTAZIONI
- IDvoto (contatore)
- IDconcorrente (testo)

Come avrete capito, si tratta di una banale applicazione per la gestione di un sondaggio.

Vorrei estrarre dal DB i seguenti 2 dati:
- il concorrente di sesso maschile più votato (tramite l'IDconcorrente)
- idem al femminile

Credevo sarebbe stato sufficiente sfruttare l'istruzione RecordCount per mezzo di qualche SQL, ma evidentemente mi sbagliavo...

Mi direste gentilmente come devo strutturare la sintassi della SELECT? Servirà mica una Join? Se si, di che tipo? Inzomma, se mi postate il codicillo, mi fareste una gran cortesia!

Grazie mille x l'aiuto, ciaooo!
tizz
Re: estrazione in base al maggior numero di record
BrightSoul
BrightSoul non è online. Ultima attività: 11/05/2009 10.54.44BrightSoul Top Poster
il 14 marzo 2006 alle 20.08
Contributi | 4.726 messaggi dal 09 febbraio 2002

Servirà mica una Join?

certo, ti serve perchè devi unire i dati di due tabelle.

SELECT TOP 1 concorrenti.*, votazioni.idvoto FROM concorrenti INNER JOIN votazioni ON concorrenti.IDconcorrente = votazioni.IDconcorrente WHERE sesso='m' ORDER BY votazioni.idvoto DESC

questa ti recupera 1 solo record: quello del concorrente maschio che ha ricevuto più voti. Rifai di nuovo la select sostituendo la parte in grassetto con sesso='f' per ottenere il record della concorrente femmina che ha ricevuto più voti.

- So what you're saying is, if we get in trouble, there's no one to help us out?
- I'm afraid not.
- Fantastic!
Re: estrazione in base al maggior numero di record
tizz
tizz non è online. Ultima attività: 29/04/2009 15.04.57tizz
il 15 marzo 2006 alle 10.23
76 messaggi dal 24 giugno 2005
Ciao e grazie x la risposta!
Ho applicato la tua Select e, oltre un errore "Tipo non corrispondente nell'espressione", risolto convertendo il campo IDconcorrente della tabella VOTAZIONI da testo a numerico), devo dirti che non riesco ad estrarre il dato che mi serviva...
In pratica, dovrei estrarre il concorrente (maschio e femmina) più "presente" nella tabella VOTAZIONI, quello che ha ottenuto più votazioni, cioè quello il cui IDconcorrente è più presente nella tabella VOTAZIONI... con la tua select, infatti, estraggo l'ultimo voto inserito, ma è una concorrente che ha ottenuto solo 1 votazione, mentre la concorrente con IDconcorrente "9" ha ottenuto 50 votazioni ed è quindi presente 50 volte nella tabella VOTAZIONI.
Scusa se ho ripetuto più volte lo stesso concetto, è solo che nel mio primo post probabilmente (anzi, sicuramente) non mi ero spiegata benissimo!
Conto nel tuo aiuto, ciao ciao e grazie x la disponibilità!

tizz
Re: estrazione in base al maggior numero di record
vitosulla
vitosulla non è online. Ultima attività: 26/04/2007 10.52.38vitosulla
il 15 marzo 2006 alle 11.00
www.dotnetside.org | 593 messaggi dal 09 ottobre 2002
In tal caso, allora, dovresti ricorrere ad un raggruppamento:

SELECT TOP 1 Concorrenti.nome, COUNT(*) AS TotaleVoti
FROM Concorrenti INNER JOIN Votazioni ON Concorrenti.IDconcorrente = Votazioni.IDconcorrente GROUP BY Concorrenti.nome ORDER BY TotaleVoti DESC;

Ciao
Modificato da vitosulla il 15 marzo 2006 11.01 -

Pochi post. Anzi, quasi quasi spengo
http://www.dotnetside.org/
Re: estrazione in base al maggior numero di record
tizz
tizz non è online. Ultima attività: 29/04/2009 15.04.57tizz
il 15 marzo 2006 alle 11.21
76 messaggi dal 24 giugno 2005
Ciao Vito, grazie anche a te x l'aiuto!
Ho applicato anche la tua Select ma ottengo questo errore:

Microsoft OLE DB Provider for ODBC Drivers error '80040e10'

[Microsoft][Driver ODBC Microsoft Access] Parametri insufficienti. Previsto 1.

/index.asp, line 13

alla linea 13 non vi è altro che l'istruzione di apertura della connessione "RSpiucliccata.Open()", dunque credo che l'inghippo riguardi proprio la Select... cosa posso fare?

approfitto per dirti che, oltre al nome, dovrei estrarre anche altri dati (che per sintesi non ho riportato nel mio primo post), te lo dico perchè non vorrei che utilizzando l'istruzione "SELECT TOP 1 concorrenti.nome" mi estragga poi solo il nome, mentre io dovrei estrarre tutti i campi della tabella CONCORRENTI, tra cui, ad esempio, l'età, gli hobby ed una foto...

grazie ancora e spero tanto in un vostro ulteriore aiuto!

tizz
Re: estrazione in base al maggior numero di record
BrightSoul
BrightSoul non è online. Ultima attività: 11/05/2009 10.54.44BrightSoul Top Poster
il 15 marzo 2006 alle 13.10
Contributi | 4.726 messaggi dal 09 febbraio 2002
scusa ma il campo IDVoto che cosa contiene? il valore 1 oppure la somma dei voti ricevuti?

- So what you're saying is, if we get in trouble, there's no one to help us out?
- I'm afraid not.
- Fantastic!
Re: estrazione in base al maggior numero di record
tizz
tizz non è online. Ultima attività: 29/04/2009 15.04.57tizz
il 15 marzo 2006 alle 13.22
76 messaggi dal 24 giugno 2005
Il campo IDvoto è di tipo contatore, quindi nella tabella VOTAZIONI avrò diversi record del seguente genere:

IDvoto | IDconcorrente (+ altri campi...)
1 | 3
2 | 2
3 | 4
4 | 2
5 | 3
6 | 3
7 | 1

Già che ci sono, ecco alcuni dati di esempio presenti sulla tabella CONCORRENTI

IDconcorrente | nome | sesso
1 | pippo | M
2 | pluto | M
3 | minnie | F
4 | paperina | F

Io dovrei tirare fuori dalla tabella CONCORRENTI i dati del maschio più "frequente" nella tabella VOTAZIONI (in questo caso quello con l'IDconcorrente = 2), idem per la femmina più "frequente" (IDconcorrente = 3).

Sono davvero confusa...

tizz
Re: estrazione in base al maggior numero di record
BrightSoul
BrightSoul non è online. Ultima attività: 11/05/2009 10.54.44BrightSoul Top Poster
il 15 marzo 2006 alle 15.22
Contributi | 4.726 messaggi dal 09 febbraio 2002
forse ti conveniva aggiungere un campo numerico alla tabella concorrenti per contenere l'ammontare dei voti? Cioè, perchè costruire la nuova tabella Votazioni con due soli campi?

Comunque, tornando alla situazione attuale, avevo male interpretato il significato dei campi della tabella Votazioni. Ha ragiove vitosulla, devi fare un raggruppamento e una join.
Prova a modifica leggermente la query in questo modo:

SELECT TOP 1 Concorrenti.*, COUNT(*) AS TotaleVoti
FROM Concorrenti INNER JOIN Votazioni ON Concorrenti.IDconcorrente = Votazioni.IDconcorrente GROUP BY Concorrenti.IDconcorrente ORDER BY COUNT(*) DESC;

se non funziona, prova questa:

SELECT TOP 1 Concorrenti.*, Voti.TotaleVoti
FROM Concorrenti INNER JOIN (SELECT IDconcorrente, COUNT(*) as TotaleVoti FROM Votazioni GROUP BY IDconcorrente) as Voti ON Concorrenti.IDconcorrente = Voti.IDconcorrente ORDER BY TotaleVoti DESC;


alla linea 13 non vi è altro che l'istruzione di apertura della connessione "RSpiucliccata.Open()",

posta il codice della linea 13

- So what you're saying is, if we get in trouble, there's no one to help us out?
- I'm afraid not.
- Fantastic!

2 pagine: [1] 2 Avanti >>

Vai a:
Torna al forum |   Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.

Powered by .db Forums "Caesar Reborn" v. 2009.6.9