Моя проблема заключается в следующем: у меня есть два массива $first
и $second
той же длины, содержащие строки. Каждой строке присваивается положительное значение в таблице с именем Fullhandvalues
:
Field: board : string(7) PRIMARY KEY Field: value : int (11)
Я хочу подсчитать, сколько раз $ first [$ i] имеет лучшее значение, чем $ second [$ i], сколько раз они имеют одинаковое значение и сколько раз $ first [$ i] имеет худшее значение, чем $ второй [$ я].
То, что я сделал сейчас, получает все значения через
$values[0]= DB::table('Fullhandvalues')->where_in("board",$first)->get(Array("value")); $values[1]= DB::table('Fullhandvalues')->where_in("board",$second)->get(Array("value"));
а затем сравнивая значения. Но это кажется очень медленным (примерно 6 секунд, для массива длиной 5000 и 50000 записей в таблице)
Большое спасибо заранее
EDIT: Как я их просматриваю:
$win=0;$lose=0;$tie=0; for($i=0;$i<count($values[0]);$i++) { if ($values[0][$i]>$values[1][$i]) $win++; elseif ($values[0][$i]<$values[1][$i]) $lose++; else $tie++; }
Ваша проблема: where_in
. Вы в основном создаете запрос с длиной implode(',', $second)
(плюс изменение). Это должно быть сначала создано Laravel (PHP), а затем проанализировано вашей СУБД.
Также сгенерированный запрос будет использовать выражение IN(...)
, которое, как известно, медленное в MySQL.
Без дополнительной информации о приложении и том, как идентификаторы платы выбраны, вот вариант, который у вас есть:
join
.