разделение запросов по разделам на разделы - PullRequest
1 голос
/ 11 марта 2020

У меня есть эта суть, которая работает хорошо

https://trycf.com/gist/02aa310c51203a969de35086f78c9a73/lucee5?theme=monokai

<cfset users = queryNew("id,username,password,section","varchar,varchar,varchar,varchar", [
   {
      "id":1,
      "username":"bob",
      "password":"unicoron",
      "section" : "Page1"
   },
   {
      "id":2,
      "username":"scott",
      "password":"ilikesoccer",
      "section" : "Page2"
   },
   {
      "id":3,
      "username":"todd",
      "password":"icheatoncod",
      "section" : "Page2"
   },
   {
      "id":4,
      "username":"ray",
      "password":"icodesmelly",
      "section" : "Page2"
   }
])>
<cfdump var="#users#">
<cfoutput>
<cfloop query="users" group="section">
    <cfquery name="abc" dbtype="query">
        select * from users where section = '#section#'
    </cfquery>
    <fieldset>
        <legend><strong>#ReReplace(section,"\b(\w)","\u\1","ALL")#</strong></legend>
        <cfoutput query='abc'>
            #username# - #password# - #section#<br/>
        </cfoutput>
    </fieldset>
</cfloop>   
</cfoutput>

, но я пытаюсь разбить первый запрос сам, поэтому я не Я должен * l oop запрос с группой, я хочу использовать структуры, такие как динамическая c структура, в которой каждая структура имеет запрос выше gist (первый в gist) для разделения на основе разделов.

Как я могу это сделать, любая идея?

Ответы [ 2 ]

1 голос
/ 11 марта 2020

Вы были близки, но я думаю, что вы собирались сгруппироваться <cfoutput>. Чтобы использовать это правильно, вам сначала понадобится ваш набор результатов, упорядоченный по атрибуту группы, который в вашей ситуации равен group="section". Поэтому я перекодировал ваш запрос на заказ по разделам. Как только это будет сделано, остальное легко. Ссылка на рабочую суть https://trycf.com/gist/0fb78c3640501cbadaa398e66c626500/lucee5?theme=monokai

РЕДАКТИРОВАТЬ

Добавлены комментарии CFML к образцу кода на основе отзывов из раздела комментариев ниже.

<cfset users = queryNew("id,username,password,section","varchar,varchar,varchar,varchar", [
   {
      "id":1,
      "username":"bob",
      "password":"unicoron",
      "section" : "Page1"
   },
   {
      "id":2,
      "username":"scott",
      "password":"ilikesoccer",
      "section" : "Page2"
   },
   {
      "id":3,
      "username":"todd",
      "password":"icheatoncod",
      "section" : "Page2"
   },
   {
      "id":4,
      "username":"ray",
      "password":"icodesmelly",
      "section" : "Page2"
   }
])>

<!--- Re-ordered via QoQ for demo purposes only. This should be ordered in the original select --->
<cfquery name="users" dbtype="query">
    select * from users order by section
</cfquery>
<cfdump var="#users#">

<cfoutput query="users" group="section">
    <!--- Code here is outputted once per group defined above. --->
    <fieldset>
        <legend><strong>#ReReplace(section,"\b(\w)","\u\1","ALL")#</strong></legend>
        <cfoutput>
            <!--- Code is outputted here for every row in the query. --->
            #username# - #password# - #section#<br/>
        </cfoutput>
    </fieldset>
</cfoutput> 
0 голосов
/ 11 марта 2020

Я рекомендую избегать запросов, особенно если их число неизвестно, так как они довольно медленные.

Вот подход, который помещает данные в структуру и массивы, чтобы сохранить их в оригинале. заказ.

<cfset sections = {} />
<cfset sectionsArray = [] />
<cfloop query="users">
    <cfif not structKeyExists(sections, users.section)>
        <cfset sections[users.section] = [] />
        <cfset arrayAppend(sectionsArray, users.section) />
    </cfif>
    <cfset arrayAppend(sections[users.section], users.currentRow) />
</cfloop>
<cfdump var="#sections#" />
<cfoutput>
<cfloop from="1" to="#arrayLen(sectionsArray)#" index="i">
    <cfset section = sectionsArray[i] />
    <fieldset>
        <legend><strong>#ReReplace(section,"\b(\w)","\u\1","ALL")#</strong></legend>
        <cfloop from="1" to="#arrayLen(sections[section])#" index="u">
            <cfset row = sections[section][u] />
            #users.username[row]# - #users.password[row]# - #users.section[row]#<br/>
        </cfloop>
    </fieldset>
</cfloop>   
</cfoutput>
...