2016-09-25 2 views
2

Я создал чаевую игру, пользователи могут угадать значение, и после 12 часов текущий курс доллара США/евро будет взят по запросу API, а победители, набравшие ближайшее значение, будут (только один победитель, в случае, если русские пользователи набрали одинаковое количество, все они выиграют).(laravel eloquent) получить ближайшие значения (чаевая игра)

Как получить «ближайший» отзыв из базы данных?

  foreach ($rounds_closed as $round_closed) 
     { 
      //get latest rate 
      $amount = 458.12; 

      //set transaction as processed and set latest rate 
      $round_closed->update([ 
       'status' => 2, 
       'win_tip' => $amount, 

       ]); 

      //get lucky winners 
    //here I would need eloquent code to choose the "nearest" winners 
      $winners_transactions = Transaction::where('round_id', $round_closed->id)->where('assessment', $round_closed->win_tip)->get(); 

      //if we have at least one winner 
      if ($winners_transactions->count() > 0) 
      { 
       //calculate their win amount 
       $sum = $round_closed->transactions->sum('amount'); 
       $fee = $sum * 0.10; 

       $sum = $sum - $fee; 

       $sum = number_format($sum/$winners_transactions->count(), 8, '.', ''); 

       foreach ($winners_transactions as $winner_transaction) 
       { 
        //mark transaction as payed out 
        $winner_transaction->update([ 
         'payout' => 1, 
         ]); 

        //payout user 


       } 

      }     
     } 

ответ

0

Я не знаком с синтаксисом в вашей структуры, но вот один из возможных подходов в SQL, что вы могли бы реорганизовать:

SET @amount = 458.12; 

#Order tips by smallest difference and return the first result 
SET @winning_tip = (SELECT tip FROM tips ORDER BY ABS([email protected]) ASC LIMIT 1); 

#Return all users with the winning tip value 
SELECT userid, tip, ABS([email protected]) AS delta FROM tips WHERE tip = @winning_tip 

http://sqlfiddle.com/#!9/fac65/2

В зависимости от размера вашего данных, вы также можете отменить все транзакции и закодировать вышеуказанную логику вне SQL.

Главное, что вам нужно определить, какой совет ближе всего к количеству, и использовать его как параметр для выбора/фильтрации ваших победителей.

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

  • Нет связанных вопросов^_^