Невозможно вложить теги cfoutput с атрибутом «query», но не уверен, как это сделать - PullRequest
0 голосов
/ 19 декабря 2011

Я получил сообщение о том, что не могу вложить теги cfoutput, когда теги используют атрибут «запрос». Я предполагаю, что это намекает на то, что я объединяю запросы, которые выводят эти два тега cfoutput.

Проблема в том, что запрос MySQL, из которого выводится первый тег cfoutput, выводит на экран отдельные фрагменты информации в таблицу, «дочерний» тег cfoutput использует запрос, который получает несколько фрагментов информации. Так что я не знаю, как бы я это сделал.

Вот запрос, который выводит тег «parent» 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 ]

2 голосов
/ 19 декабря 2011

Не забывайте, что эту конкретную ошибку можно получить только с CFOUTPUT.И можно также перебрать набор записей с CFLOOP.На самом деле, имеет смысл использовать CFLOOP, если вы делаете цикл, а не просто выводить значение.Единственный недостаток CFLOOP при циклическом просмотре набора записей - это то, что он не поддерживает атрибуты группировки (это упущение было поднято в Adobe - http://cfbugs.adobe.com/cfbugreport/flexbugui/cfbugtracker/main.html#bugId=83513 - но оно не получает большой тяги), но неПохоже, это будет проблемой для вашего требования.

1 голос
/ 19 декабря 2011

ColdFusion правильно;вы не можете встроить один cfoutput с атрибутом запроса в другой cfoutput (с атрибутом запроса).

Однако вы можете запустить вывод запроса, а затем внутри него ... встроить новый запрос ицикл по этим результатам (который уже находится в контексте cfoutput) - при условии, что вы позаботитесь о том, чтобы охватывал имя запроса и столбцы (и какую строку), к которым вы обращаетесь, - в виде индексации массиваправила синтаксиса.

Для этого ответа предположим, что ваш 1-й запрос (гигантский) заключен в cfquery с именем "parent":

<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>

Обратите внимание на ссылки на именазапросы в выводе.

Обратите внимание, что для удобства я обернул второй запрос в функции;вам не нужно делать это обязательно - вы можете ввести cfquery в cfoutput.

Конечно, ответ real состоит в том, чтобы переписать ваш SQL-запрос так, чтобы он соединялся с необходимыми атрибутами file_name, а затем использовать запрос с атрибутом group ... ноЯ оставлю это вне этого ответа, так как он более сложный и требует знания более продвинутого SQL, а также того, как работает атрибут group.

Этот ответ будет работать для вас, но сообщество ColdFusion наиболеескорее всего отшлепает вас за цикл внутри цикла - на данный момент это решит вашу проблему, и вы сможете исследовать атрибут group и более сложный оператор SQL позже.

...