2017-06-07 4 views
2

J'ai un scénario comme ci-dessous sur une page. J'ai une requête retournée par un cfc all_data qui a des colonnes, section, état, données. Maintenant, la conception de la page ressemble à quelque chose comme ci-dessous.cfloop et requête de requêtes

Section1 section2 section3 section4 -> sélectionnez une section pour sélectionner l'état dans ce

Disons Section1 est sélectionné -> State1 état2 STATE3 associée à cet article doivent être affichés -> sélectionnez un état à voir les données lié à cela.

Dire État3 est sélectionné -> Les données relatives à l'état3 sont affichées.

Donc, fondamentalement, j'ai besoin de 3 cfloops qui vont accomplir ce qui précède. Je fais `

<cfquery name="section" dbtype="query"> 
select distinct section from all_data 
</cfquery>` 

pour la première boucle, je boucle sur requête « section » pour afficher toutes les sections.

<cfloop query ="section"> 
    <cfquery name="state" dbtype="query"> 
    select distinct state from all_data where section = section.section 
    </cfquery> 
</cfloop> 

pour l'affichage d'état I boucle comme ci-dessus. Pour la boucle 3 qui est l'affichage des données, j'ai essayé plusieurs choses mais rien ne semble fonctionner correctement. Est-ce la bonne approche? Toute idée est appréciée.

+0

La première chose qui saute à l'esprit est l'attribut de groupe de cfoutput. –

+0

Comment l'utiliser – user747291

+0

Votre chaîne de recherche google est 'cfoutput query group'. –

Répondre

1

Je pense que vous pouvez utiliser l'attribut de groupe comme ci-dessous

<cfset myQuery = QueryNew("Section, State, Data", "VarChar, VarChar, VarChar")> 

<cfset newRow = QueryAddRow(MyQuery, 5)> 

<!--- Set the values of the cells in the query ---> 
<cfset temp = QuerySetCell(myQuery, "Section", "Section 1", 1)> 
<cfset temp = QuerySetCell(myQuery, "State", "State 1", 1)> 
<cfset temp = QuerySetCell(myQuery, "Data", "Data 1", 1)> 
<cfset temp = QuerySetCell(myQuery, "Section", "Section 1", 2)> 
<cfset temp = QuerySetCell(myQuery, "State", "State 2", 2)> 
<cfset temp = QuerySetCell(myQuery, "Data", "Data 2", 2)> 
<cfset temp = QuerySetCell(myQuery, "Section", "Section 1", 3)> 
<cfset temp = QuerySetCell(myQuery, "State", "State 2", 3)> 
<cfset temp = QuerySetCell(myQuery, "Data", "Data 3", 3)> 
<cfset temp = QuerySetCell(myQuery, "Section", "Section 2", 4)> 
<cfset temp = QuerySetCell(myQuery, "State", "State 2", 4)> 
<cfset temp = QuerySetCell(myQuery, "Data", "Data 2", 4)> 
<cfset temp = QuerySetCell(myQuery, "Section", "Section 2", 5)> 
<cfset temp = QuerySetCell(myQuery, "State", "State 2", 5)> 
<cfset temp = QuerySetCell(myQuery, "Data", "Data 3", 5)> 

<cfoutput query ="myQuery" group="Section"> 
    </br>#Section# <!--- You will get distinct Sections here ---> 
    <cfoutput group="Section"> 
      </br>#State#, 
      <cfoutput>#Data#,</cfoutput> 
    </cfoutput> 
</cfoutput> 
+0

Peut aussi se débarrasser de 'temp'. Aucun point capturant le résultat s'il n'est pas utilisé. CF10 + a également introduit un moyen plus simple de créer et de remplir une requête manuelle. Voir ['QueryNew (columnlist [, columntypelist [, rowData]])'] (https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-functions/functions-m-r/querynew.html). – Leigh

1

voulez-vous dire quelque chose comme ça?

<cfloop query ="section"> 
     <cfquery name="state" dbtype="query"> 
      select distinct state from all_data where section = section.section; 
     </cfquery> 
     <cfloop query ="state"> 
      <cfquery name="getdata" dbtype="query"> 
       select * from all_data where section = section.section 
       and state = state.state; 
      </cfquery> 
      <cfdump var=#getdata#> 
     </cfloop> 
    </cfloop> 
+0

Merci à tous pour vos entrées – user747291