【问题标题】:How to form this RAW sql statement with Query Builder Laravel如何使用 Query Builder Laravel 形成这个 RAW sql 语句
【发布时间】:2018-05-22 12:19:24
【问题描述】:

也许这里有人可以帮助我使用 Laravel 的 Query Builder 形成这个 RAW SQL 语句

**

DB:: select(DB:: raw("select min(heartrate) as hr, max(rotation) as rot, max(calories) as cal 
                                          from trainingsdatas, trainings 
                                          where trainings.user_id = $id 
                                          and trainingsdatas.training_id= trainings.id "));

**

这是一次尝试:

DB::table('trainingsdatas')
->join('trainings','trainings.id','=','trainingsdatas.training_id')
->min('heartrate as hr')
->max('rotation as rot')
->max('calories as cal')
->where('trainings.user_id','=', $id)
->get();

**

总是有错误..语法似乎不正确。

【问题讨论】:

  • “表格”是什么意思?
  • 如何使用查询生成器获得正确的查询?

标签: php mysql sql laravel


【解决方案1】:

尝试使用选择

DB::table('trainingsdatas')
->join('trainings','trainings.id','=','trainingsdatas.training_id')
->selectRaw('min(heartrate) as hr, max(rotation) as rot, max(calories) as cal')
->where('trainings.user_id','=', $id)
->get();

【讨论】:

  • 我得到这个错误:SQLSTATE[42S22]: Column not found: 1054 Unknown column 'min(heartrate)' in 'field list' (SQL: select min(heartrate) as hr, max(rotation) from @987654324 @inner join trainings on trainings.id = trainingsdatas.training_id where trainings.user_id = 1)
  • 如果这不起作用,您需要在列前加上相应的表名min(trainings.heartrate)
  • 更新版本有效,但查询中有一条 RAW 语句。但感谢您的帮助!
【解决方案2】:

试试这个

 $trainings = Trainings::query()->where('user_id', $id)
->join('trainingsdatas', 'trainings.id', '=', 'trainingsdatas.training_id')
->select(DB::raw('MAX(rotation) as rot'), DB::raw('MIN(heartrate) as hr'), DB::raw('MAX(calories) as cal'))

【讨论】:

    猜你喜欢
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 1970-01-01
    相关资源
    最近更新 更多