首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >原则2 Order By w/ Functions

问原则2 Order By w/ Functions
EN

Stack Overflow用户
提问于 2012-08-09 09:07:14
回答 3查看 553关注 0票数 2

我正尝试在Doctrine2 v2.1.7的Symfony2中做到这一点:

代码语言:javascript
复制
$query = $this->em->createQuery(
            "SELECT a
            FROM ".$repo." a
            WHERE a.type_id = :typeid
              AND a.scenario = :scen
              AND a.contact_id = :cid
              AND a.row_type LIKE :rwtp
            ORDER BY SUBSTRING(a.row_type, 4, 1)  "
        )->setParameters(
            array(
                'typeid'    =>$sesData['type_id'],
                'scen'      =>$sesData['scenario'],
                'cid'       =>$sesData['contact_id'],
                'rwtp'      =>'%.'.$whereVal.'%'
            )
        );

$customValues =  $query->getResult();

规则2在ORDER BY子句上失败了,因为它不喜欢其中的任何内容,除了它显示的列名和排序方向。

我已经查看了使用原生查询的文档,但这不起作用,因为这个查询用于从多个表中提取数据(它位于我们使用的一个全局方法中),所以我不能做这种映射工作,因为除了上面的where子句之外,其余的列名在每个表中都是不同的。

我认为为了实现这一点,我需要一个真正的原生查询来执行映射(水合?)自动像所有其他非本机DQL查询一样。但这部分让我很为难。

我该怎么做才能让它工作呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-09 20:06:50

如何创建另一个列来存储SUBSTRING(a.row_type, 4, 1)的结果,例如,在插入时,映射该列并按其排序?无论如何,与在每个查询上计算每行的子字符串相比,它的效率要高得多。

票数 1
EN

Stack Overflow用户

发布于 2012-08-09 16:04:09

虽然效率较低,但您是否考虑过在从数据库中获取结果后,自己使用php排序函数对结果进行排序?如果您的结果集不是很大,这可能是一种明智的方法。

票数 0
EN

Stack Overflow用户

发布于 2012-08-11 18:41:07

试试这个:

代码语言:javascript
复制
SELECT a, SUBSTRING(a.row_type, 4, 1) AS row_type
        FROM ".$repo." a
        WHERE a.type_id = :typeid
          AND a.scenario = :scen
          AND a.contact_id = :cid
          AND a.row_type LIKE :rwtp
        ORDER BY row_type
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11875419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档