Filtro su tabelle correlate

mercoledì 02 maggio 2007 - 14.16

mine Profilo | Newbie

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

>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

ma la vista la devo fare sulla relazione?

Brainkiller Profilo | Guru

>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

maxdb e c#

Brainkiller Profilo | Guru

>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

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

>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

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

>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/
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 !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5