无法使用属性“query”嵌套cfoutput标记,但不确定如何执行此操作

时间:2011-12-19 00:13:18

标签: mysql coldfusion coldfusion-9

我发现错误,当标签使用“查询”属性时,我无法嵌套cfoutput标签。我认为这暗示了我将这两个cfoutput标签输出的查询结合起来。

问题是,MySQL查询第一个cfoutput标签输出数据是将单个信息打印到表中,“child”cfoutput标签使用的是获取多条信息的查询。所以我不知道我是怎么做到的。

以下是“父”cfoutput标记输出的查询:

            SELECT DISTINCT s.id            AS  id,
                s.heading           AS  heading,
                s.reasonForSale     AS  reason,
                s.viewing           AS  viewing,
                s.additionalInfo    AS  additional,
                s.contents          AS  content,
                a.id                        AS  auctioneer_id,
                a.name                      AS  auctioneer,
                a.website                   AS  website,
                d.startDate                 AS  start_date,
                d.endDate                   AS  end_date,
                d.startTimeHours            AS  start_hour,
                d.startTimeMins             AS  start_min,
                d.startTimeType             AS  start_time_type,
                d.endTimeHours              AS  end_hour,
                d.endTimeMins               AS  end_min,
                d.endTimeType               AS  end_time_type,
                l.address                   AS  address,
                l.city                      AS  city,
                l.county                    AS  county,
                l.postcode                  AS  postcode,
                t.entryCopy                 AS  sale_type,
                f.filename                  AS  logo_file,
                s.featuredAuction           AS  featured,
                s.sale_of_week              AS  sow,
                s.brochure,
                s.auctioneerslink
        FROM    sales s,
                auctioneers a LEFT JOIN files f ON f.id = a.logoFile,
                saledates d,
                saleloc l,
                lookupcopy t
        WHERE   a.id                    =   s.auctioneer    AND
                d.saleId            =   s.id            AND
                t.id                =   s.saleType      AND
                l.id                =   d.saleLoc       AND
                d.id                =   #tmp_id#
        GROUP BY    id

这是我的新查询,这将获得几条信息,一系列的东西,我需要在打印时循环。它们是图像文件名,需要包装在图像标签等中......

        SELECT      file_name
    FROM        sales_photos
    WHERE       sale_id = #tmp_id#
    ORDER BY    id

如果我无法嵌套这两个cfoutput标签,我该怎么做?

感谢。

2 个答案:

答案 0 :(得分:2)

不要忘记只有CFOUTPUT才能获得该特定错误。并且可以使用CFLOOP循环遍历记录集。实际上,如果一个循环使用CFLOOP更有意义,而不是仅仅输出一个值。循环遍历记录集时CFLOOP唯一的缺点是它不支持分组属性(这个遗漏已经用Adobe提出 - http://cfbugs.adobe.com/cfbugreport/flexbugui/cfbugtracker/main.html#bugId=83513 - 但它并没有得到太大的牵引力,但它没有听起来这对你的要求来说是一个问题。

答案 1 :(得分:1)

ColdFusion是正确的;您无法在另一个cfoutput(带有查询属性)中嵌入带有查询属性的cfoutput。

然而,您可以启动查询输出,然后在其中...嵌入一个新查询,并循环遍历这些结果(已经在cfoutput的上下文中) - 只要您注意范围您正在访问的查询名称和列(以及哪一行) - la数组索引语法规则。

对于这个答案,假设您的第一个查询(巨型查询)包含在名为“parent”的cfquery中:

<cfoutput query="parent">
   <cfset file_name_qry = getFileNameFromID(parent.id[parent.currentrow]) />
   #parent.heading[parent.currentrow]#
     <cfloop from="1" to="#file_name_qry.recordcount#" index="i">
     #file_name_qry.file_name[i]#<br/>
     </cfloop>
</cfoutput>

<cffunction name="getFileNameFromID" returntype="query">
  <cfargument name="id" type="string" />

  <cfset var tmpQry = '' />
  <cfquery name="tmpQry" datasource="mydsn">
    SELECT      file_name
    FROM        sales_photos
    WHERE       sale_id = #arguments.id#
    ORDER BY    id
  </cfquery>

  <cfreturn tmpQry />
</cffunction>

请注意输出中对查询名称的引用。

另请注意,为方便起见,我将第二个查询包含在函数中;你不需要这样做 - 你可以自由地在cfoutput中注入cfquery。

当然,真正的答案是重新编写SQL查询,以便它连接到必要的file_name属性,然后使用具有组属性的查询......但是我将它从这个答案中删除,因为它更复杂,并且需要更高级SQL的知识以及组属性的工作方式。

这个答案对你有用,但是ColdFusion社区很可能会让你在循环中循环 - 现在,它会解决你的问题,你可以稍后调查group属性和更高级的SQL语句