带分组和 mySql 排序的输出

Output with Grouping and mySql Order By

出于演示目的,假设我有以下查询:

SELECT a_label, aID, b_label, bID, c_label, cID, d_label, dID, orderByA, orderByB, orderByC 
FROM table
ORDER BY orderByA, orderByB, orderByC

在显示端,可以对LI进行排序,将它们对应的位置存储在对应的tablecolumn中。

在我的输出中,我正在遍历数据并需要使用 <cfoutput query="qryName" group="aID"> 然后一个子组使用 <cfoutput group="bID"> 另一个子组使用 <cfoutput group="cID"> 等等.

我的问题是我无法弄清楚查询应该是什么样子的组合,这样我的输出才能正确分组。我需要在我的 sql 查询中分组还是将其留在 cfm 代码中?那么订单呢?

我想我想问的是您如何知道分组何时属于查询与代码?

更新了一些 CFM 代码

<cfoutput query="#aw#" group="cID">
    <ul class="listItem pItem">
        <cfoutput group="pID">
            <li class="listItem pTitle"  data-cid="#aw.cID#" data-pid="#aw.pID#" data-wid="#aw.wID#">
                <i class="glyphicon glyphicon-chevron-right rotate wToggle"></i> <input type="checkbox" name="p" class=""> #aw.pLabel#
                <ul class="listItem wItem hide">
                    <cfoutput group="wID">
                        <li class="listItem wTitle" id="w_#aw.cID#_#aw.pID#_#aw.wid#_#aw.woaid#">
                            <i class="glyphicon glyphicon-chevron-right rotate dToggle font-blue-madison"></i> <input type="checkbox" name="w" class=""> #aw.wLabel#
                            <ul class="listItem dItem hide">
                                <cfoutput>
                                   <li class="listItem dTitle" id="d_#aw.cID#_#aw.pID#_#aw.wID#_#aw.dID#_#aw.woaid#"> 
                                        <input type="checkbox" name="d" class="child"> #aw.dID#
                                    </li>
                                </cfoutput>
                            </ul>
                        </li>
                    </cfoutput>
                </ul>
            </li>
        </cfoutput>
    </ul>
</cfoutput>

用户可以将项目从一个部分拖到另一个部分,但前提是这些部分处于同一级别。例如,dItem 只能移动到另一个具有 dItem 的容器。同样,一个 wItem 只能移动到另一个 wItem 等等。

我正在处理 sql 查询并将更新此问题。我一次从一个级别开始,而不是同时开始整个查询(使这个一口大小)。

更新 我想我发现了问题,坏数据。有些项目在它们各自的 orderBy* 中没有值,因此分组的项目在子组中的顺序不正确。新添加项目的默认值是 NULL 但我认为这需要一个不同的值。是否有用于 sortby 列的最佳实践默认值?

更新二 我发现了这个 SO 问题,Insert and set value with max()+1 problems,我可以在添加新项目时实施它。这样它就会出现在列表的末尾。

知道了!我的 <cfoutput...group=... 需要按与 GROUP BY 子句中相同的列(和顺序)match/group。一旦我使它们匹配,我的输出就与我在数据库中看到的相匹配。

已更新SQL
SELECT a_label, aID, b_label, bID, c_label, cID, d_label, dID, orderByA, orderByB, orderByC FROM table ORDER BY cID, orderByA, orderByB, orderByC

orderByC 只是为了很好的衡量,最后一个 <cfoutput> 标签不需要分组。

更新了 CFM(删除了非必要代码以突出显示解决方案

<cfoutput query="#aw#" group="cID">
<ul class="listItem pItem">
    <cfoutput group="orderByA">
        <li class="listItem pTitle">
            <i class="glyphicon glyphicon-chevron-right"></i> #aw.pLabel#
            <ul class="listItem wItem hide">
                <cfoutput group="orderByB">
                    <li class="listItem wTitle">
                        <i class="glyphicon glyphicon-chevron-right"></i>#aw.wLabel#
                        <ul class="listItem dItem hide">
                            <cfoutput>
                               <li class="listItem dTitle"> 
                                    #aw.dID#
                                </li>
                            </cfoutput>
                        </ul>
                    </li>
                </cfoutput>
            </ul>
        </li>
    </cfoutput>
</ul>