在 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 BY
。 ORDER BY
后面是 ASC | DESC
关键字。
您尝试添加的所有这些参数也许您应该将它们移至 WHERE 子句,check this link 以获取更多信息。
【讨论】:
以上是关于在 Symfony2 中按多个值对数据库中的记录进行排序的主要内容,如果未能解决你的问题,请参考以下文章