在 Symfony2 中按多个值对数据库中的记录进行排序

Posted

技术标签:

【中文标题】在 Symfony2 中按多个值对数据库中的记录进行排序【英文标题】:Order records from database by several values in Symfony2 【发布时间】:2014-12-20 23:36:32 【问题描述】:

我正在尝试按自定义顺序对一组结果进行排序。该查询对表中的所有值求和,并按特定类型对它们进行分组。我想按类型对记录进行排序,但这不是按字母顺序排列的。

这些是我希望结果的值和顺序:

Prevention
Minimisation
Reuse
Recycling
Energy Recovery
Disposal

这是我正在使用的查询:

    $wasteHierarchy = $dm->createQuery('
        SELECT SUM(efu.totalUom) AS totalTonne, efu.wasteHierarchy
        FROM CoreBundle:EnviroFiguresUpload efu
        WHERE efu.completionDate BETWEEN :start AND :end
        AND efu.division IN (:profile)
        GROUP BY efu.wasteHierarchy
        ORDER BY efu.completionDate DESC'
    )->setParameters(array(
                'start' => $ds,
                'end' => $de,
                'profile' => $divisionProfiles
    ));

    $wasteHier = $wasteHierarchy->getResult();

我已经尝试过这个查询,但是它在 Symfony2 中抛出了一个错误:

        $wasteHierarchy = $dm->createQuery('
            SELECT SUM(efu.totalUom) AS totalTonne, efu.wasteHierarchy
            FROM CoreBumysql order by resultndle:EnviroFiguresUpload efu
            WHERE efu.completionDate BETWEEN :start AND :end
            AND efu.division IN (:profile)
            GROUP BY efu.wasteHierarchy
            ORDER BY efu.wasteHierarchy = :prevention, efu.wasteHierarchy = :minimisation, efu.wasteHierarchy = :reuse, efu.wasteHierarchy = :recycling, efu.wasteHierarchy = :energy, efu.wasteHierarchy = :disposal'
        )->setParameters(array(
                    'start' => $ds,
                    'end' => $de,
                    'profile' => $divisionProfiles,
                    'prevention' => 'Prevention',
                    'minisation' => 'Minimisation',
                    'reuse' => 'Reuse',
                    'recycling' => 'Recycling',
                    'energy' => 'Energy Recovery',
                    'disposal' => 'Disposal'
        ));

        $wasteHier = $wasteHierarchy->getResult();

有什么想法吗?

编辑 1 这是 Symfony2 生成的错误:

[2/2] QueryException:[语法错误] 第 0 行,第 260 列:错误:预期 字符串结尾,得到'='

[1/2] QueryException: SELECT SUM(efu.totalUom) AS totalTonne, efu.wasteHierarchy FROM CoreBundle:EnviroFiguresUpload efu WHERE efu.completionDate BETWEEN :start AND :end AND efu.division IN (:profile) GROUP BY efu.wasteHierarchy ORDER BY efu.wasteHierarchy = :prevention ASC, efu.wasteHierarchy = :minimisation ASC, efu.wasteHierarchy = :reuse ASC, efu.wasteHierarchy = :recycling ASC, efu.wasteHierarchy =:能源 ASC,efu.wasteHierarchy =:处置 ASC +

【问题讨论】:

你能发布 Symfony 抛出的错误吗? 【参考方案1】:

在 SQL 中,您只能按列排序,不能按列值排序。 这就是 QueryException 的原因。

有可能在 mysql 中做你想做的事(也可能在其他 dbms 中):ORDER BY FIELD

【讨论】:

【参考方案2】:

SQL这部分是错误的:

ORDER BY efu.wasteHierarchy = :prevention, efu.wasteHierarchy = :minimisation, efu.wasteHierarchy = :reuse, efu.wasteHierarchy = :recycling, efu.wasteHierarchy = :energy, efu.wasteHierarchy = :disposal

您不能在ORDER BY 子句中设置值。检查这个link,它解释了如何正确使用ORDER BYORDER BY 后面是 ASC | DESC 关键字。

您尝试添加的所有这些参数也许您应该将它们移至 WHERE 子句,check this link 以获取更多信息。

【讨论】:

以上是关于在 Symfony2 中按多个值对数据库中的记录进行排序的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Doctrine2 (Symfony2) 中按案例排序

在PHP中按数组键的值对字典中的数组进行排序

如何在 Freemarker 中按特定值对列表进行分组?

在python中按值对defaultdict进行排序

Pycharm中怎么给字典中的多个键-值对同时加上单引号

如何在 JavaScript 中按值对地图进行排序?