Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Filtro su tabelle correlate
mercoledì 02 maggio 2007 - 14.16
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
mine
Profilo
| Newbie
24
messaggi | Data Invio:
mer 2 mag 2007 - 14:16
ciao a tutti, sto sviluppando un applicazione per l invio di newsletter ad un gruppo di contatti.Nell'aaplicazione si ha la possibilità di filtrare i contatti a cui inviare la mail a seconda di un certo numero di parametri.i contatti sono memorizzati in un database nella tabella CONTATTI.Il filtro permette di selezionare i contatti attraverso alcuni campi della tabella contatti (ad es. provincia, nazione,flag_abilitazione).devo prevedere anche la possibilità di filtrare i contatti per i relativi intreressi, i quali sono presenti in un altra tabella formata da due campi, IDCONTATTO e IDINTERESSE.la tabella CONTATTI e la tabella INTERESSI son collegate da una relazione che lega le due chiavi IDCONTATTO delle due tabelle.Io vorrei inviare la mail solo ai contatti che hanno un determinato interesse....come potrei fare?
grazie
roberto
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
mer 2 mag 2007 - 14:23
>che hanno un determinato interesse....come potrei fare?
Metti in relazione le due tabelle, crei una vista, e quando devi recuperare quali contatti hanno un certo interesse, fai la query sulla vista appena creata e la filtri con l'interesse richiesto mettendolo nella WHERE.
Ciao
David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/
mine
Profilo
| Newbie
24
messaggi | Data Invio:
mer 2 mag 2007 - 15:28
ma la vista la devo fare sulla relazione?
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
mer 2 mag 2007 - 16:27
>ma la vista la devo fare sulla relazione?
Intanto che database utilizzi ?
David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/
mine
Profilo
| Newbie
24
messaggi | Data Invio:
mer 2 mag 2007 - 17:52
maxdb e c#
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
mer 2 mag 2007 - 22:26
>maxdb e c#
Supporta le viste questo Database ?
In ogni caso per incrociare i dati fra le due tabelle basta un classico JOIN.
David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/
mine
Profilo
| Newbie
24
messaggi | Data Invio:
gio 3 mag 2007 - 08:03
si si accetta le viste...ma senza usare le viste , con una relazione non è proprio possibile implementare il tutto?
Spiego un po' meglio la struttura del problema.
La tab. contatti (CONTATTI) è composta da tutti i campi relativi ai contatti stessi (nome, cognome,indirizzo.....) mentre gli interessi di tutti i contatti sono salvati in una tab. (CONT_INTERESSI) formata da 2 campi, IDCONTATTO e CDINTERES che formano la chiave primaria.mentre per la tab. CONTATTI la chiave primaria è IDCONTATTO.Ho questa relazione tra le due tabelle :
ds.Relations.Add(RL_CONT_INTERESSI, ds.Tables[DB.TB_CONTATTI].Columns[DB.CL_ID_CONTATTO], ds.Tables[DB.TB_CONTATTI_INTERESSI].Columns[DB.CL_ID_CONT],true);
che mi mette in relazione un contatto con tutti i suoi interessi. Ora selezionando una particolare tipologia di interese da un combobox, come posso filtrare la tab. CONTATTI in modo da ottenere tutti i contatti che hanno quel particolare interesse?
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
gio 3 mag 2007 - 08:20
>che mi mette in relazione un contatto con tutti i suoi interessi.
>Ora selezionando una particolare tipologia di interese da un
>combobox, come posso filtrare la tab. CONTATTI in modo da ottenere
>tutti i contatti che hanno quel particolare interesse?
Ok mi è chiaro.
Sei capace di fare un JOIN ?
Le Relations sul DataSet servono quando colleghi i dati ad una GridView. Ciò ti permette di vedere i dati in modalità padre figlio, ossia a fianco di ogni contatto apparirebbe un + che ti fa vedere gli interessi sottostanti.
Nel tuo caso è sufficiente una query con un JOIN per mettere in relazione le tue tabelle e fare il filtro con la WHERE.
Esempio se abbiamo le due tabelle Contatti e Interessi la Query che ne uscirebbe sarebbe così:
SELECT Contatti.ContactID, Contatti.Name, Interessi.InteresseID FROM Contatti INNER JOIN Interessi ON Contatti.ContactID = Interessi.ContattoID WHERE (Interessi.InteresseID = 3)
Dove 3 è il filtro sull'interesse.
Ciao
David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/
mine
Profilo
| Newbie
24
messaggi | Data Invio:
gio 3 mag 2007 - 11:06
si si so fare un join, solo che oltre che a filtrare per interessi dovrei anche applicare altri filtri, simili al filtro interessi, allora dovrei fare un join di tutti questi filtri?Lo dovrei fare direttamente nel db o si potrebbe fare anche nel dataset?
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
gio 3 mag 2007 - 15:43
>si si so fare un join, solo che oltre che a filtrare per interessi
>dovrei anche applicare altri filtri, simili al filtro interessi,
>allora dovrei fare un join di tutti questi filtri?Lo dovrei fare
>direttamente nel db o si potrebbe fare anche nel dataset?
Io lo farei direttamente nella Query.
Oppure puoi fare in modo misto parte nella query e parte nel dataset.
Per fare filtri su DataSet in genere si usa la classe DataView che ti restituisce subset di un DataSet utilizzando condizioni WHERE. Se lo fai fare direttamente al database però l'operazione è più efficiente e rapida rispetto a farla con il DataSet che ha un più alto impatto in termini di performance specialmente con moli di dati rilevanti.
Ciao
David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !