首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Zend框架3按字段排序

Zend框架3按字段排序
EN

Stack Overflow用户
提问于 2020-05-15 07:51:24
回答 2查看 441关注 0票数 0

如何在ZendFramework3中编写以下查询?

代码语言:javascript
复制
SELECT * FROM table_name ORDER BY FIELD(field_name, 'a','b','c');

我试过

代码语言:javascript
复制
$select->order(new Expression("FIELD(field_name, 'a', 'b', 'c')"),field_name);

但不能移动..。

EN

回答 2

Stack Overflow用户

发布于 2020-05-26 10:44:09

我认为你在某个地方犯了错误,一定要确保你:

use.

  • removed (第二个参数形式order() )正确导入了Expression,没有.

Zend\Db\Sql\Expression是使用特定于DBMS的表达式扩展查询的正确方法。

通过下面的测试脚本,我得到了您的预期结果:

代码语言:javascript
复制
$platform = new Zend\Db\Adapter\Platform\Mysql();
$select = new Zend\Db\Sql\Select();
$select->from(['t' => 'table_name']);
$select->order(
    new Zend\Db\Sql\Expression(sprintf(
        "FIELD(t.%s, 'a', 'b', 'c')",
        $platform->quoteIdentifier('field_name')
    ))
);

var_dump($select->getSqlString($platform));

结果是:

代码语言:javascript
复制
string(81) "SELECT `t`.* FROM `table_name` AS `t` ORDER BY FIELD(t.`field_name`, 'a', 'b', 'c')"

这里很少有注释:

当您使用Laminas instead.

  • Make时,
  • Zend命名空间替换为Laminas,确保您总是从平台实例中用quoteIdentifier()引用标识符(您应该能够从您的表接收平台或在可能的地方接收DB instance).
  • Use表别名),这是针对SQL注入的额外安全级别,它们也使您的生活变得更容易。在有上千行查询的大表上,
  • 会变得非常慢。因此,您可以添加一个索引,如果不起作用,使用FIELD()预先计算的值创建另一列(您可以在应用程序中或在DDL级别上这样做)。
票数 0
EN

Stack Overflow用户

发布于 2020-05-17 05:47:51

不使用表达式,您可以将字符串赋给order方法吗?

代码语言:javascript
复制
$select->order("FIELD(field_name, 'a', 'b', 'c')");

如果字段名是变量

代码语言:javascript
复制
$select->order("FIELD(" . $field_name . ", 'a', 'b', 'c')");

如果问题仍然存在,则可以通过打印查询来跟踪问题。

代码语言:javascript
复制
$select->query()->__toString()

or 

$select->__toString();

不要确切地记住查询,您可以尝试它们

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61814350

复制
相关文章

相似问题

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