mysql - Symfony2 中通过多个值对数据库中的记录进行排序

标签 mysql symfony doctrine-orm

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

这些是我想要结果的值和顺序:

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: [Syntax Error] line 0, col 260: Error: Expected end of string, got '='

[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 = :energy ASC, efu.wasteHierarchy = :disposal ASC +

最佳答案

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

可以在 mysql 中执行您想要的操作(也可能在其他 dbms 中):ORDER BY FIELD

关于mysql - Symfony2 中通过多个值对数据库中的记录进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27585375/

相关文章:

symfony - 如何将数据库中的所有数据显示到twig中?

c# - 从表中提取时间数据并将其放入TimeSpan

php - Mysql查询两列不重复

mysql - Sensu 检查 MySQL 长时间运行的查询。

symfony - 学说 2 : Detach/Merge on ManyToMany association

symfony - 如何将自定义属性添加到 Symfony Doctrine YAML 映射文件

mysql - 数据库重启后Jboss无法重新连接到Mysql

php - 使用 Doctrine 创建一对多的多态关系

php - 如何根据相关OneToMany关联中的条件选择一组实体?

php - 使用已建立的 PDO 连接与 Doctrine Master/Slave 连接