如何使用 laravel 5 中的查询生成器从子查询中进行选择

Posted

技术标签:

【中文标题】如何使用 laravel 5 中的查询生成器从子查询中进行选择【英文标题】:how to select from subquery using query builder in laravel 5 【发布时间】:2017-11-20 09:00:57 【问题描述】:

请帮助我, 我有疑问: SELECT * from (select * from products ORDER BY id DESC LIMIT 20) AS result ORDER BY discount DESC LIMIT 14

那么,如何在 laravel 5 中转换为查询生成器。 tks!

【问题讨论】:

看看this,可能会有所帮助。 tks 伙计,我做到了 【参考方案1】:

使用查询构建器和导入(使用)数据库,允许您构建和获取您想要的结果。

use DB;

$result = DB::table(
    DB::raw("(" . 
        DB::table('products')
          ->select('*')
          ->orderBy('id', 'desc')
          ->limit(20)
          ->toSql()
        . ") as result"
    )
)
->select('*')
->orderBy('discount', 'desc')
->limit(14)
->get();

table() 选择要查询的表。在这种情况下,我们正在构建一个单独的 SQL 语句来获取表。

select() 你想看的列。

orderBy($column, $direction) 其中 $column 是您要排序的列的名称,$direction 是 order、desc 或 asc。

limit($limit) 只返回 $limit 个项目到结果集。

toSql() 以字符串形式返回当前的 QueryBuilder SQL 语句。

get() 返回 Collection 中的数据。

在缺少的折扣订单中也添加了。

【讨论】:

请在您的答案中添加一些上下文。仅靠代码通常不能得到好的答案 我想你错过了“ORDER BY discount DESC”【参考方案2】:

尝试类似:

Products::orderBy('id', 'desc')->take(20)->orderBy('discount', 'desc')->take(14)->get();

【讨论】:

tks 伙计,我试过了,但结果不是 orderBy('discount')。它给出了 14 条记录 orderby('id', 'desc')。你还有其他的制作吗? 你可以使用:$q = Products::orderBy('id', 'desc')->take(20)->get();然后 $test = $q->sortByDesc('nome')->take(14);看看这是否有效

以上是关于如何使用 laravel 5 中的查询生成器从子查询中进行选择的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 laravel 5.5 中的查询生成器错误 sql 注入 *

如何在 Laravel 5.1 中获取数据库中的表列表

Laravel 5.4 查询生成器使用 orWhere 子句时缺少参数 2

如何从子查询中获取结果作为查询中的参数

如何配置 laravel-websockets 包以使用从子目录提供的 Laravel 应用程序,即 https://laravel-apps.test/app1?

Laravel 5 中使用查询生成器的复杂查询