如何在 laravel 5.4 中编写 mysql 查询?

Posted

技术标签:

【中文标题】如何在 laravel 5.4 中编写 mysql 查询?【英文标题】:How to write mysql query in laravel 5.4? 【发布时间】:2017-11-28 15:02:25 【问题描述】:

我是 laravel 新手,我想在 laravel 5.4 中编写 mysql 查询。 查询就像:

注意:避免列名..

SELECT * 
FROM (SELECT DISTINCT * 
      FROM messages 
      WHERE (from_id=1 OR to_id=1) 
ORDER BY created DESC) as m 
GROUP BY `from_id` 

我试过了,但报错。

$messages = DB::table('messagetbl')
                ->select('*')
                ->Where(function($query) use ($userid)
                    $query->distinct()
                    ->where('senderid',$userid)
                    ->orWhere('receiverid',$userid)
                    ->orderBy('datetime','desc');
                 )
                ->groupBy('senderid')
                ->get();

错误:

SQLSTATE[42000]:语法错误或访问冲突:1055 SELECT 列表的表达式 #1 不在 GROUP BY 子句中,并且包含 非聚合列“db.messagetbl.id”在功能上不起作用 依赖于 GROUP BY 子句中的列;这与 sql_mode=only_full_group_by (SQL: select * from messagetbl where (senderid = 8 或receiverid = 8) 分组senderid)

提前致谢。

【问题讨论】:

添加错误的完整堆栈跟踪并更清楚地解释问题。请参阅how do I ask a good question? 更新您的问题。 【参考方案1】:

我相信这样的事情:

  DB::table('messages')
        ->select('*') 
        ->where('form_id', '=', 1)
        ->orWhere('to_id', '=', 1)
        ->orderBy('created', 'desc')
        ->groupBy('form_id')
        ->distinct()
        ->get();

【讨论】:

错误:语法错误或访问冲突:1055 SELECT 列表的表达式 #1 不在 GROUP BY 子句中,并且包含在功能上不依赖于 GROUP BY 中的列的非聚合列 'db.messagetbl.id'条款;这与 sql_mode=only_full_group_by 不兼容 在 config/app.php 中重置 sql_mode : 'Datasources' => [ 'default' => [ 'className' => 'Cake\Database\Connection', 'driver' => 'Cake\ Database\Driver\Mysql', 'persistent' => false, 'host' => 'localhost', ... 'init' => ["SET sql_mode = ''"], ], 你能解释一下是什么错误吗?它与一些主键问题或什么有关。 这是一个警告,表明您的查询不明确。您想从消息中选择所有,然后 form_id 列用于分组。这里的解决方案是 SELECT form_id ,或者对它应用像 MIN() 这样的聚合运算符。 我得到的所有数据都没有分组:(

以上是关于如何在 laravel 5.4 中编写 mysql 查询?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.4 迁移 ENUM 在 MySQL 中失败

如何在 laravel 5.4 中存储数组 cookie?

PHP 7.0 上的 Laravel 5.4:PDO 异常 - 找不到驱动程序 (MySQL)

如何将我的 laravel 5.0 项目直接升级到 5.4?

如何在laravel 5.4中强制删除

sh 在Ubuntu 16.04上安装Laravel 5.4,MySQL 5.7,Apache2.4和PHP7.1