【问题标题】:Using GROUP_BY with a query builder and mySQL >= 5.7将 GROUP_BY 与查询生成器和 mySQL >= 5.7 一起使用
【发布时间】:2016-03-17 15:38:13
【问题描述】:

我正在使用一个 symfony 网络应用程序并创建了一个包来获取旧版 WordPress 数据库,并且它曾经可以正常工作:

class PostsProvider extends AbstractProvider
{
    // ...

    public function searchPostsWith($queries, $locale)
    {
        // "p" stands for Posts class 
        $qb = $this->repPost->createQueryBuilder('p');

        $qb
            ->select('p.id')
            ->addSelect('p.postTitle as title')
            ->addSelect('p.postContent as content')
            ->addSelect('p.postType as type')
            ->addSelect('p.postName as slug')
                ->where('p.postStatus = :publish')
                ->andWhere('p.postType = :post')
                ->orWhere('p.postType = :page')
                    ->setParameter('publish', 'publish')
                    ->setParameter('post', 'post')
                    ->setParameter('page', 'page')
            ->leftJoin('WordPressBundle:TermRelationships', 'r', 'HAVING', 'p.id = r.objectId')
            ->innerJoin('WordPressBundle:Terms', 't', 'WITH', 'r.termTaxonomyId = t.termId')
            ->addSelect('t.slug as locale')
                ->having('t.slug = :locale')
                ->setParameter('locale', $locale)
            ;
        // ...

但自从我在本地环境中升级到 mySQL 5.7 后,我得到了:

SQLSTATE[42000]:语法错误或访问冲突:1055 SELECT 列表的表达式 #6 不在 GROUP BY 子句中,并且包含在功能上不依赖于 GROUP BY 中的列的非聚合列 '(db_name).a1_.slug'条款;这与 sql_mode=only_full_group_by 不兼容

所以我尝试添加以下内容:

->leftJoin('WordPressBundle:TermRelationships', 'r', 'HAVING', 'p.id = r.objectId')
    ->groupBy('p.id')
->innerJoin('WordPressBundle:Terms', 't', 'WITH', 'r.termTaxonomyId = t.termId')
    ->groupBy('r.termTaxonomyId')

但这并没有帮助。

mySQL 文档建议更改模式或添加 group by 子句,但我不希望更改配置。

关于调整我的代码以通过后台兼容性消除此错误的最佳方法的任何建议?

谢谢。

【问题讨论】:

标签: php mysql wordpress symfony doctrine-orm


【解决方案1】:

也许,在你升级到 5.7 之后,默认的 sql_mode 会改变。

您可以检查旧的 sql_mode 并将其设置为与 5.7 相同。

其实你可以很容易地用 SQL 改变它:

set global sql_mode = '';

【讨论】:

  • 感谢您的回复,最后我使用@Miro 评论中的链接并定义了一个~/my.cnf 文件。但是我认为您在这里给出了正确的答案,所以让我们标记一下;)
  • 不要在此处使用结果:查询正常,0 行受影响,1 个警告(0.00 秒),知道吗?
  • @Jean-LucBarat Don't work 是什么意思?仍然收到错误Syntax error or access violation: 1055
  • @Dylan Su 通过在 my.conf 中添加它(不设置)来解决;),请注意最好保留其他选项,使用SELECT @@sql_mode; 查看全部。
猜你喜欢
  • 2020-01-07
  • 2021-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-18
  • 2018-04-11
  • 1970-01-01
相关资源
最近更新 更多