我每天都会通过电子邮件发送给订阅者,使用coldfusion和mySQl构建。
我目前有2个教会参加试验计划。当参与的教会对每日灵修进行更改时,更改将保存在已编辑的表格中。 当灵修出现在两个教堂时,查询首先搜索已编辑的版本。如果存在,它会发送编辑后的版本。否则,默认的灵修将会传给另一个教会。
我可以使用左外连接来显示已编辑的版本。遗憾的是,编辑后的版本已发送给所有人。
我是否需要使用另一个左外连接或是否有其他方法来解决此问题? 有两个问题:
1。 Getclients
由3个创建布局的表组成,显示公司信息,并提供订阅者信息,所有这些都由contact_id加入。
订阅者表
耗材,电子邮件,名字,时区和contact_id
联系表
提供社交链接,页脚,公司名称,取消订阅信息的信息 contact_id,company,city,state,zip,facebook,twitter,linkedin,youtube,website
布局表
27个字段,提供contact_id加入的响应式电子邮件的页眉,页脚和颜色组合的所有信息
我的第一个获取所有电子邮件信息的查询:
<cfquery name="getClients" datasource="#application.dsn#">
select *
from (subscriber INNER JOIN contacts ON subscriber.contact_id =
contacts.contact_id)INNER JOIN layout ON contacts.contact_id = layout.contact_id
where subscriber.timezone = '4'
</cfquery>
2。 GetDevotional
由两个供奉灵修的表格组成:
MOBILE TABLE
标题,经文,正文,display_date
这是提供每日奉献的默认表。
编辑表
eTitle,eScripture,ebody,display_date
当信息存在时的可选表替换MOBILE TABLE。否则默认的灵修将会消失。 通过在GETDEVOTIONAL QUERY中使用左外连接,我可以显示已编辑的版本,但它会显示给每个人,而不仅仅是创建编辑版本的教会。
<cfquery name="getDevotional" datasource="#application.dsn#">
SELECT mobile.mob_id AS id, mobile.display_date AS display_date,
mobile.title AS title, mobile.body AS body, mobile.scripture AS
scripture,edited.edit_id AS edit_id,edited.contact_id AS contact_id,edited.etitle AS
etitle, edited.escripture AS escripture,edited.ebody AS ebody
FROM mobile
left outer join edited ON mobile.mob_id = edited.mob_id
where mobile.display_date = <cfqueryparam value ="#dateformat(now(), "YYYY-MM-DD")#"
cfsqltype="cf_sql_date">
</cfquery>
输出:
<cfif getdevotional.edit_id NEQ "">
<p style="font-family: Arial, Helvetica, sans-serif;
font-size: 14px;font-weight: bold;color: #h2_color#;margin-top: 12px;
margin-bottom: 4px;padding-bottom: 0px;">#GetDevotional.etitle#<br />
#getDevotional.escripture#</p>
<p style="text-indent:15px;">
#paragraphFormat(GetDevotional.ebody)#
</p>
<cfelse>
<p style="font-family: Arial, Helvetica, sans-serif; font-size: 14px;
font-weight: bold;color: #h2_color#;margin-top: 12px;margin-bottom: 4px;
padding-bottom: 0px;">#GetDevotional.title#<br />
#getDevotional.scripture#</p>
<p style="text-indent:15px;">
#paragraphFormat(GetDevotional.body)#
</p>
这个问题导致整个项目陷入停顿。非常感谢您的建议。
答案 0 :(得分:1)
你正在尝试一个查询,如果它在那里给我x,否则给我。几乎任何数据库都可以这样做:
select case
when table3.field1 is not null then table3.field1
else table2.field1
end TheFieldYouWant
from table1 join table2 on something
left join table3 on something
某些数据库具有可以使用的功能,而不是case构造。我可以查找MySQL,但你也可以。
正如我的评论中所提到的,您仍然存在数据库设计问题,因为您没有存储编辑所适用的教堂。一旦你解决了这个问题,你就可以担心编码了。