【问题标题】:How to convert raw query MYSQL to Laravel framework如何将原始查询 MYSQL 转换为 Laravel 框架
【发布时间】:2019-08-18 16:58:11
【问题描述】:

我不知道如何在 Laravel 5.8 中使用以下代码 我已经尝试过了,但我不能正常工作。

$sql = mysqli_query($db, "SELECT *, SUM(amount) AS SumBudget FROM messages GROUP BY contact_phone ORDER BY SUM(amount) DESC LIMIT 3");

$orderList = 0;
while ($data = mysqli_fetch_assoc($sql))
{
    $orderList++;
    $user = $data['user']; 
    $cost = $data['SumBudget'];
    if ($orderList == 1) {
        printf("%d. %s %d‎฿<br>", $orderList, $user, $cost);
    }
    else if ($orderList == 2)
    {
        printf("%d. %s %d‎฿<br>", $orderList, $user, $cost);
    }
    else 
    {
        printf("%d. %s %d‎฿<br>", $orderList, $user, $cost);
    }
}

我的代码已经试过了。

$data = DB::table('messages')
        ->where('phone_number', $request->phone_number)
        ->select(DB::raw('SUM(amount) as cost'))
        ->groupBy(DB::raw('contact_phone'))
        ->orderBy(DB::raw('SUM(amount)', 'DESC'))
        ->limit(3)
        ->get();

谁能帮帮我,谢谢。

【问题讨论】:

  • 提示:您也可以在 Laraval 中使用 RAW 查询,而无需使用查询构建器。
  • 是的,我使用 DB:: 然后将我的代码放在 DB:: 之后,laravel 给我错误语法错误或访问冲突:1055
  • 我想我们已经谈过了。我的意思是DB::connection()-&gt;getPdo()-&gt;query(...) 应该没问题,你的 qeury 中没有用户输入。至少在顶部的示例中没有。。跨度>
  • ...这让我想知道为什么 laravel PHP 代码中有一个 WHERE 而不是原生 PHP/MySQL 代码..
  • .. 还有SELECT * GROUP BY contact_phone 通常不是你应该写的SQL .. MySQL Handling of GROUP BY .

标签: php mysql laravel laravel-5.8


【解决方案1】:

我认为它可以帮助你:

DB::table('messages')
    ->select('column_name', /* ... */, DB::raw('SUM(amount) AS cost'))
    ->where('phone_number', $request->phone_number) // if you want to filter
    ->groupBy('contact_phone')
    ->orderBy('cost', 'DESC')
    ->take(3)
    ->get()

【讨论】:

  • SELECT * GROUP BY contact_phone 通常不是您应该编写 SQL 的方式.. MySQL Handling of GROUP BY .. 运行此查询可能意味着无效结果..
  • @RaymondNijland 你再一次完全正确。我更新了我的例子:)
  • SQLSTATE[42000]: 语法错误或访问冲突: 1055 'laravel.messages.id' 不在 GROUP BY 中(SQL: select id, SUM(amount) AS cost from @987654325 @ where phone_number = 0973279939 group by contact_phone order by cost desc limit 3)
  • 我将 select column_name 调整为选择 id,然后出现错误语法错误或访问冲突:1055
  • 是的,因为 id 列不在 group by 子句中。 Mysql 不知道如何对所有这些不同的 ID 进行分组。因为您的循环中似乎不需要此 ID,所以我不会在您的 Mysql 查询中使用它。你应该只选择user 列(我想对于一个电话号码,你总是有同一个用户)和SUM(amount) AS cost
猜你喜欢
  • 2015-06-26
  • 1970-01-01
  • 2019-04-29
  • 2021-10-29
  • 2020-10-14
  • 2019-02-03
  • 2016-09-14
  • 2021-09-11
  • 2018-01-04
相关资源
最近更新 更多