如何在 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 中失败
PHP 7.0 上的 Laravel 5.4:PDO 异常 - 找不到驱动程序 (MySQL)