php - laravel 如何优化一个表中的简单 where 查询

标签 php mysql laravel

我有一个简单的 where 查询,它在 foreach 中重复几次,实际上可能会很多次,所以这是我的查询:

    for ($i = 0; $i < count($hasdate); $i++) {
        $roomprice = RoomPricingHistory::
             Where('accommodation_room_id', $hasroom[$i])
            ->where('from_date', '<=', $hasdate[$i])
            ->where('to_date', '>=', $hasdate[$i])
            ->get()->sortBy('created_at');

        $lastget = last($roomprice);
        $last_price = last($lastget);
        if ($last_price) {
            $final_price[] = $last_price->sales_price;
        } else {
            $has_not_capacity = $hasdate[$i];
        }
    }

因此,每次运行时,望远镜都会花费大约 2,509.10 毫秒,这是望远镜向我显示的表上运行的查询

  select
  *
from
  `room_pricing_histories`

    where
      `accommodation_room_id` = 3
      and `from_date` <= "2019-06-01 09:00:00"
      and `to_date` >= "2019-06-01 09:00:00"

那么关于如何优化这个查询有什么想法吗?

最佳答案

嗯,根据经验 - 不要在循环内运行查询。

您可以使用whereIn()来查询多个ID

$roomIds = $hasroom // assume this has array of ids

$roomprice = RoomPricingHistory::
        whereIn('accommodation_room_id', $roomIds)
        ->where('from_date', '<=', $fromDate)
        ->where('to_date', '>=', $toDate)
        ->get()->sortBy('created_at');

关于php - laravel 如何优化一个表中的简单 where 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56313509/

相关文章:

php - 向通过 php/html 脚本生成的按钮添加功能

javascript - 在 bootstrap 3 中将参数传递给远程模态

mysql - 获取已开具发票的总计和每个客户的欠款

php - 如何在 Laravel 中将变量传递给另一个 Controller

PHP cURL CURLOPT_FILE 在 curl_exec() 之后为空

php - 使用 Paypal 付款提高安全性

php - 如果检查到另一个页面,则使复选框带走数据

python - Flask 无法连接 RDS MySQL

php - 打开模态时保留变量的值

php - 在 Laravel/Lumen Eloquent 中获取两个日期之间的所有年份