我有一系列数据可以在讲话的庄严中动态生成唯一数据。它实际上是一个有5个哈希的数组。
我想要做的是一个带有where子句的基本选择查询,该子句通过OR检查每个查询基本上是一行查询而不是每个数组项的查询。
我正在尝试确保没有任何一个进入数据库的哈希值与另一个哈希值相同,我知道实际发生的概率实际上是空的但是它的可能性一点也不少,比对不起更安全我的观点是问题
无论如何,我正在考虑的查询没有任何意义,好像找到匹配,查询将导致我想要做的是从原始数组中找到未找到的那个并使用它,如果所有5都不是' t发现我只是随机选择一个我猜到底我想在一个新数组中形成一个1到5的结果,所以我可以随机选择那个结果
这是可能的,还是仅仅通过一个歌曲查询来循环每一个?
答案 0 :(得分: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个哈希值的结果集,则表示在数据库中找不到至少一个哈希值。
您可以像这样循环遍历结果集:
while($row = $pdo->fetch()) {
$index = $row[0] // first column of the result set
unset($hashes[$index]);
}
当while完成时,数组中剩下的唯一哈希值应该是数据库中找不到的哈希值。
答案 1 :(得分: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;
当然,这取决于您使用的数据库系统。
答案 2 :(得分:0)
你的意思是这样吗?
$sql = "SELECT * FROM `table` WHERE `field` = ";
$where_string = "'" . implode("' OR `field` = '",$my_array) . "'";
$sql .= $where_string;
您可以使用:
$my_array = array_unique($my_array);
删除重复的值。