ColdFusion多数据源合并:商家信息与营业时间查询结果关联
解决方法
方案1:用结构体缓存营业时间(推荐,不需要QofQ基础)
你可以先把查询到的营业时间按商家ID分组存入结构体,输出商家信息时直接匹配对应ID的营业时间即可,代码修改如下:
<!-- 原有查询代码保持不变 --> <cfquery name="businesses" datasource="businesses"> SELECT id, bus_name, bus_address, bus_city, bus_phone FROM businesses WHERE id < 20 </cfquery> <cfscript> businessResults=ValueList(businesses.id) </cfscript> <cfquery name="hoursopen" datasource="hoursopen"> SELECT * FROM hoursopen WHERE businessID IN ( <cfqueryparam value="#businessResults#" cfsqltype="CF_SQL_INTEGER" list="yes" /> ) AND dayWeek = dayOfWeek(Now()) </cfquery> <!-- 新增:构建商家ID对应营业时间的结构体 --> <cfset hourMap = {}> <cfloop query="hoursopen"> <cfset hourMap[hoursopen.businessID] = hoursopen> </cfset> <!-- 合并输出商家信息和对应营业时间 --> <cfoutput query="businesses"> <strong>商家ID: #id#</strong><br/> 商家名称: #bus_name#<br/> 地址: #bus_address#<br/> 城市: #bus_city#<br/> 联系电话: #bus_phone#<br/> 今日营业时间: <cfif structKeyExists(hourMap, id)> #hourMap[id].openTime# - #hourMap[id].closeTime#(时区:#hourMap[id].timeZone#) <cfelse> 暂无录入 </cfif> <hr/> </cfoutput>
方案2:使用QofQ(查询的查询)关联两个结果集
如果你需要直接得到合并后的完整查询结果,可以用ColdFusion的QofQ做左连接:
<cfquery name="mergedResult" dbtype="query"> SELECT b.*, h.timeZone, h.openTime, h.closeTime FROM businesses b LEFT JOIN hoursopen h ON b.id = h.businessID </cfquery> <!-- 直接循环合并后的结果即可 --> <cfoutput query="mergedResult"> <strong>商家ID: #id#</strong><br/> 商家名称: #bus_name#<br/> 地址: #bus_address#<br/> 城市: #bus_city#<br/> 联系电话: #bus_phone#<br/> 今日营业时间: <cfif isNull(openTime)>暂无录入<cfelse>#openTime# - #closeTime#(时区:#timeZone#)</cfif> <hr/> </cfoutput>
内容的提问来源于stack exchange,提问作者Robert Furst
相关产品推荐
相关产品推荐

