Autor | Zpráva | ||
---|---|---|---|
Clint Profil |
#1 · Zasláno: 30. 10. 2014, 11:59:40
Zdarec, měl bych na Vás dotaz? Mám 3 tabulky:
nl_email_cross_contactList_contact se sloupci contactList, contact_id, e_active (propojení emailů s kontakt listy) nl_email_cross_campaign_contactList se sloupci cam_id a contactList_id (propojení kontakt listu s kampaněmi) nl_email_contact se sloupci id, email, deleted (emaily) poz. jeden mail může být ve více kontakt listech Tabulky jsou propojené následovně: nl_email_contact.id = nl_email_cross_contactList_contact.contact_id + nl_email_cross_contactList_contact.contactList = nl_email_cross_campaign_contactList.contactList_id Posílám tento dotaz: SELECT DISTINCT nl_email_contact.e_email, nl_email_contact.id FROM nl_email_cross_campaign_contactList LEFT JOIN nl_email_cross_contactList_contact ON nl_email_cross_contactList_contact.contactList_id = nl_email_cross_campaign_contactList.contactList_id LEFT JOIN nl_email_contact ON nl_email_contact.id = nl_email_cross_contactList_contact.contact_id WHERE nl_email_cross_campaign_contactList.cam_id = 84 AND nl_email_cross_contactList_contact.e_active = "Y" AND nl_email_contact.deleted = "N" Vše funguje dobře. Můj dotaz zní: pokud bude jedna kampaň napojena na více kontakt listů a v každém kontakt listu bude stejný mail a alespoň jeden bude mít nastaveno e_active = "N" tak ve výsledku selectu nebude. Asi to zavání vnořeným select dotazem nebo case sensitive. Problém je, že abych mohl ve vnořeném dotazu pracovat s daty potřebuji k tomu email, který ale získá vnější select. A co vím, tak vnitřní select se provede dřív než vnější. Možná se pletu, ale nevím jak ten dotaz poskládat. Díky za pomoc |
||
juriad Profil |
Clint:
Takže chceš jen ty emaily, které ani v jednom listu nebyly zakázány. Mimochodem, komu jsi co provedl, že máš ty tabulky tak „prakticky“ pojmenované. Tento dotaz vrátí všechny kontakty, které jsou v alespoň jednom kontakt listu a nejsou nikde zakázané. Protože 'N' < 'Y', tak ta poslední podmínka s MIN testuje, zda všechny zmínky tohoto kontaktu jsou 'Y'. SELECT DISTINCT co.id, co.e_mail FROM nl_email_contact co JOIN nl_email_cross_contactList_contact cl_co ON co.id = cl_co.contact_id WHERE co.deleted = 'N' # nechceme filtrovat podle e_active (to uděláme až na závěr) GROUP BY co.id # sdružíme si všechny zmínky podle kontaktu HAVING MIN(cl_co.e_active) = 'Y' # vyžadujeme aby žádná zmínka neobsahovala 'N' Teď do toho ještě přidáme tu kampaň: SELECT DISTINCT co.id, co.e_mail FROM nl_email_contact co JOIN nl_email_cross_contactList_contact cl_co ON co.id = cl_co.contact_id JOIN nl_email_cross_campaign_contactList ca_cl ON ca_cl.contactList_id = cl_co.contactList WHERE co.deleted = 'N' AND ca_cl.cam_id = 84 GROUP BY co.id HAVING MIN(cl_co.e_active) = 'Y' Šlo by to i přes vnořený dotaz a harakiri s LEFT JOIN nebo pomocí EXISTS, ale pokud jsou jen dvě hodnoty ('N', 'Y'), tak by MIN mohlo fungovat. |
||
Clint Profil |
#3 · Zasláno: 30. 10. 2014, 12:58:06
Bohužel to nefunguje zkusil jsem HAVING MIN i HAVING MAX a vždy to vytáhne email, který v jednom kontakt listu je aktivní a ve druhém neaktivní. Čili výsledek je neaktivní
|
||
juriad Profil |
Zrovna jsem to u sebe otestoval, a funguje mi to.
Moment, můj dotaz testuje jen contact_list, které jsou u té vybrané kampaně. Jak se to má chovat pro e_mail, který je zakázaný v kontakt listu pro kampaň 85, ale je povolený pro kampaň 84? |
||
Kajman Profil |
#5 · Zasláno: 30. 10. 2014, 13:26:10
Ještě může být problém v tom, pokud tam je někde stejný email s jiným id.
|
||
Clint Profil |
#6 · Zasláno: 30. 10. 2014, 13:38:34
Problém jsme zjistil v tomto: mám tabulku nl_email_cross_contactList_contact
pokud si vyfiltruji mail a je uložený v tomto pořadí tak to projde: 1 - 1 - N 2 - 1 - Y 3 - 1 - N kde 1,2,3 jsou id kontaktních listu (první sloupec), 1 id kontaktu (např. mail@mail.cz) (druhý sloupec), třetí sloupec aktivní neaktivní pokud ale je to takto tak se kontakt vždy zobrazí 1 - 1 - N 2 - 1 - Y 3 - 1 - Y vždy záleží na poslední položce v tabulce zda má Y nebo N Kajman nemůže být problém že mail má jedinečné id ale je napojeno na různé id kontakt listů? |
||
juriad Profil |
#7 · Zasláno: 30. 10. 2014, 13:45:04
Clint:
Zkoušel jsem ve svém testu změnit pořadí a pořád to funguje. Má contact-list 1 napojení na kampaň 84? Pokud ne, tak každý chápeme zadání jinak. (V takovém případě se záznam 1-1-N vůbec neuvažuje.) |
||
Kajman Profil |
#8 · Zasláno: 30. 10. 2014, 13:48:57
Clint:
Když je řádek s e_active='N' označen jako smazaný (deleted = 'N'), má se brát v potaz? |
||
Clint Profil |
#9 · Zasláno: 30. 10. 2014, 14:03:02
příklad z tabulky:
2 2 N 3 2 Y 7 2 N 15 2 Y 25 2 Y první sloupec - contactList_id - id kontaktních listů (v kampani 84 jsou propojené tyto kontakt. listy 2,3,15 druhý sloupec - contact_id (identifikátor na mail mal má nastaveno deleted = 'N' - čili se musí brát na to zřetel) třetí sloupec - e_active - aktivita neaktivita |
||
Kajman Profil |
#10 · Zasláno: 30. 10. 2014, 15:15:16
|
||
Časová prodleva: 9 let
|
0