1

我的问题如下:我有两个长度相同的数组$first$second包含字符串。每个字符串在名为 的表中被赋予一个正值Fullhandvalues

Field: board : string(7) PRIMARY KEY
Field: value : int (11)

我想计算 $first[$i] 有多少次比 $second[$i] 有更好的价值,有多少次它们具有相同的价值,以及有多少次 $first[$i] 的价值比 $ 更差第二[$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 个条目的数组长度)

首先十分感谢

编辑:我如何遍历它们:

$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++;
    }
4

1 回答 1

1

你的问题是where_in。您基本上是在构建一个长度为implode(',', $second)(加上更改)的查询。这必须首先由 Laravel (PHP) 生成,然后由您的 DBMS 分析。

生成的查询也将使用IN(...)表达式,这在 MySQL 中是众所周知的。

如果没有有关应用程序以及如何选择板 ID 的更多信息,您可以选择以下选项:

  • 创建一个临时表并用您的数组数据填充它(这应该很快,但最好这些数据应该已经在数据库中)
  • 不要忘记在临时表上创建索引。
  • 使用内部选择join
于 2013-02-11T08:57:46.267 回答