原则 2 按功能排序



我正在尝试在Symfony2中使用Doctrine2 v. 2.1.7执行此操作:

$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 查询一样自动执行映射(水合?但这部分让我感到困惑。

我可以尝试什么来让它工作?

如何创建另一列,其中已经存储了SUBSTRING(a.row_type, 4, 1)的结果,例如在插入时,映射该列并按此排序?无论如何,与计算每行每个查询的子字符串相比,它会更有效。

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

试试这个:

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

相关内容

  • 没有找到相关文章

最新更新