2016-06-30 3 views
0

Я ужасен при написании запросов, касающихся больших наборов данных. Я хотел взять удар в Laravel и посмотреть, что я могу придумать. Есть ли лучший способ написать этот запрос и вывести результаты?Сделайте этот запрос более эффективным

Код

$visitors = DB::table('visitors') 
      ->where('id_client',1) 
      ->select('id', 'ip', DB::raw('count(*) as total'), 'date', 'city', 'region') 
      ->groupBy('ip') 
      ->orderBy('date', 'DESC') 
      ->simplePaginate(25); 

Результаты

@foreach($visitors as $visitor) 
       <tr> 
         <td> 
          {{$visitor->id}} 
         </td> 
         <td> 
          @if (date('F d, Y', strtotime($visitor->date)) === date('F d, Y')) 
           Today 
          @else 
           {{ date('F d, Y', strtotime($visitor->date)) }} 
          @endif 
         </td> 
         <td> 
          {{$visitor-total}} 
         </td>      
         <td> 
          {{$visitor->city}} 
         </td> 
         <td> 
          {{$visitor->region}} 
         </td> 
       </tr> 
      @endforeach 

      {!! $visitors->render() !!} 

Кроме того, я получаю ошибку Use of undefined constant total - assumed 'total' при попытке загрузить страницу.

Любая помощь будет принята с благодарностью. Благодаря!

+1

ну, так как он даже не работает, «более эффективный» будет просто работать –

+1

'{$ visitor-total}}' синтаксическая ошибка, не удаляя '>' для методов доступа объектов. Кроме того, что случилось с запросом, который у вас есть? Это медленно? Не дает ли он желаемых результатов? – Ohgodwhy

+0

Вы получаете эту ошибку из-за опечатки: {{$ visitor-total}} должно быть {{$ visitor-> total}} – Kaladin11

ответ

0

Запрос выглядит хорошо, если он делает то, что вам нужно.

Если ваш запрос выполняется слишком медленно, возможно, вы можете добавить индекс в столбец «id_client», чтобы ускорить поиск (если у вас его уже нет).

Смежные вопросы