ObbelixMedlem sedan okt. 2002257 inlägg Hej.
Håller på med en nyhetsbrevs-"motor". Har delat upp det enligt följande:
[b]mail_addresses[/b]
id | mail_address
[b]groups[/b]
id | group_name
[b]group_rel[/b]
id | mail_id | group_id
[b]newsletters[/b]
id | caption | newstext osv...
[b]newsletter_rel[/b]
id | news_id | group_id
Man lägger alltså till mottagarna i en tabell, dessa kan sen ingå i flera grupper, därav tabellen "group_rel" som håller reda på id:t på grupper samt mottagaren.
Även själva nyhetsbreven ska gå att skicka till flera grupper och detta håller "newsletter_rel" reda på.
Om nu en mottagare ingår i, säg två grupper, och man ska skicka ut ett brev till just dessa två ska ju inte den behöva få brevet mer än en gång. Hur kan jag få ut "unika" mottagare med distinct utifrån ett id från "newsletters" tabellen? och kan man i samma fråga få ut antalet?
Använder en Accessdatabas till detta.
Peter SMedlem sedan dec. 20025 483 inlägg Någonting sådant här:
select distinct m.mail_address
from newsletters n
inner
join (
newsletter_rel nr
inner
join (
groups g
inner
join (
group_rel gr
inner
join mail_addresses m
on m.id = gr.mail_id
)
on gr.group_id = g.id
)
on g.id = nr.group_id
)
on n.id = nr.news_id
where n.id = <id>;
För att få ut det totala antalet, är nog det bästa att ställa en separat fråga.
ObbelixMedlem sedan okt. 2002257 inlägg Denna funka ju fint, men hur blir count-frågan?
Har testat med följande, men får fel...
select count(distinct m.mail_address)
from newsletters n
inner
join (
newsletter_rel nr
inner
join (
groups g
inner
join (
group_rel gr
inner
join mail_addresses m
on m.id = gr.mail_id
)
on gr.group_id = g.id
)
on g.id = nr.group_id
)
on n.id = nr.news_id
where n.id = <id>;
LarsGMedlem sedan dec. 200012 464 inlägg Vad vill du räkna?
Vilket fel får du?
ObbelixMedlem sedan okt. 2002257 inlägg Jag vill räkna hur många "unika" mottagare det kommer skickas till.
Får detta felmeddelande:
Syntax error (missing operator) in query expression 'COUNT(DISTINCT m.mail_address)'.
Tar jag bort "distinct" från frågan räknar den alla, men eftersom en mottagare kan finnas i flera grupper som det skickas till ska den ju bara räknas en gång.
LarsGMedlem sedan dec. 200012 464 inlägg Ja du använder ju access vilken inte tillåter count(distinct ...)
select count(*)
from mail_addresses
where id in
(select mail_id
from group_rel g join newsletter_rel n on g.group_id = n.group_id
where n.id = <id>)
ObbelixMedlem sedan okt. 2002257 inlägg Njae.. den vill inte fungera. Borde det inte vara en join till eller nåt, för "n.id=<id>" kan jag ju inte använda då n.id syftar på tabellen newsletter_rel. Det id jag har är id:t för newsletters tabellen.
LarsGMedlem sedan dec. 200012 464 inlägg where n.news_id
Blev förvillad av alla id. Det är för övrigt helt onödigt att id-kolumnerna finns med i rel-tabellerna.
ObbelixMedlem sedan okt. 2002257 inlägg Tusen tack!
alla id:n är en gammal ful ovana som jag har släpandes kvar.