1

我有一组数据,可以在说话的庄园中动态生成独特的数据。它实际上是一个包含 5 个哈希的数组。

我想要做的是一个带有 where 子句的基本选择查询,它通过 OR 基本上是一个单行查询而不是每个数组项的查询来检查每个查询。

我试图确保进入数据库的哈希值与另一个哈希值相同,我知道实际发生的概率几乎为零,但仍有可能,比抱歉更安全是我对此事的看法

无论如何,我正在考虑的查询没有任何意义,好像找到了一个匹配项查询将导致我想要做的就是从原始数组中找到未找到的那个并在没有找到所有 5 个的地方使用它'我会随机选择一个我猜我想在一个新数组中形成一个 1 到 5 的结果,所以我可以从该结果中随机选择

这是可能的,还是用一个单曲查询循环遍历每一个更容易?

4

3 回答 3

2
"SELECT
        CASE hashes.hash
            WHEN $hashes[0] THEN 0
            WHEN $hashes[1] THEN 1
            WHEN $hashes[2] THEN 2
            WHEN $hashes[3] THEN 3
            ...
        END
    FROM hashes WHERE hashes.hash IN(".implode($hashes).")"

这应该准确地告诉您在服务器上找到了您发送到服务器的哪些哈希值。

结果集将是生成查询的数组的索引键 (0, 1, 2, 3)。

如果您基于 100 个散列的数组发送查询,并得到一个包含 99 个散列的结果集,这意味着在 db 中至少没有找到一个散列。

您可以像这样循环遍历结果集:

while($row = $pdo->fetch()) {
    $index = $row[0]  // first column of the result set
   unset($hashes[$index]);
}

当 while 完成时,数组中剩下的唯一散列应该是在数据库中找不到的散列。

于 2012-05-20T06:29:12.867 回答
0

我的观点是,用一个查询循环遍历每个查询会更容易。从你所说的来看,一次做这件事似乎没有什么大的好处。

在这种情况下,我会建议:

 alter table myTable create id_bkp int;
 update myTable set id_bkp=account_id;
 update myTable set account_id=56 where id_bkp=100;
 update myTable set account_id=54 where id_bkp=56;
 alter table myTable drop id_bkp;

当然,这取决于您使用的数据库系统。

于 2012-05-20T06:24:54.347 回答
0

你的意思是这样的吗?

$sql = "SELECT * FROM `table` WHERE `field` = ";

$where_string = "'" . implode("' OR `field` = '",$my_array) . "'";

$sql .= $where_string;

你可以使用:

$my_array = array_unique($my_array);

删除重复值。

于 2012-05-20T06:30:42.333 回答