<?php
$rows = TableA::whereIn('id', function($query){
$query->select('id')
->from('table_a')// name of the model table
->orderByRaw('updated_at ASC NULLS FIRST')
->limit(20);
})->orderByRaw('random()')->limit(5)->get();// use ->toSql() instead of ->get() to see the actual raw query
dd($rows);
字符串
**注意:**对于MySQL用户,您可以使用连接来避免This version of MariaDB doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'错误。请参阅here。
2条答案
按热度按时间pjngdqdw1#
您可以使用子查询来完成此操作。我更喜欢这种方式,因为它看起来更具可读性。
字符串
**注意:**对于MySQL用户,您可以使用连接来避免
This version of MariaDB doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
错误。请参阅here
。使用联接使查询同时适用于Maria DB和Posterre,如下所示:
型
请参阅
Join Subquery Docs
。z18hc3ub2#
这是一种滑稽,但我修改了以下查询(等效的结果)。
字符串
这个版本最终占用更少的数据库内存(用于处理),并且执行时间非常相似。
请注意:这在我的例子中是有效的,因为My“in”子句永远不会超过150个元素。
这可以在laravel中实现,
型