gpt4 book ai didi

php - SQL 查询从大量字符串列表中获取数据

转载 作者:搜寻专家 更新时间:2023-10-30 21:48:24 24 4
gpt4 key购买 nike

我有一个很大的字符串列表(更具体地说是 1500 个电子邮件地址),我需要在一个非常大的数据库表中为每个字符串查找一段数据(例如主键,mydataitem)。我怎样才能有效地做到这一点?


例如,这太慢了(还有其他问题):

$stringArray = ('foo','bar','baz',..., 'for 1000s of items');

foreach($stringArray as $mystring) {
$res = mysql_query("select mydataitem,blah FROM users WHERE blah = '$mystring'");
$info=mysql_fetch_assoc($res);
...
}

我想避免的事情:

  • 我不想遍历列表并为每个项目执行 SELECT。即 1500 个查询(如上例所示)
  • 我不想在一个查询中将整个表读入数组并在代码中进行查找,因为这会占用太多内存。数据库表有 100k+ 行。
  • 我不想构建包含 1499 个 OR 的大型查询,因为查询太大了。 (例如“select mydataitem FROM users WHERE blah = 'aaa' OR blah = 'bbb' OR ...”)

注意:我使用的是 MySql v5.0.45


更新: 谢谢大家 - 出于某种原因,我认为 IN 只是用于整数 ID 列表 - 现在我知道得更多了。

最佳答案

mysql_query("select mydataitem,blah FROM users WHERE blah IN ('"
.implode("','",array_map('mysql_real_escape_string',$stringArray)."')';

更好的是,使用可以使用准备好的语句的 mysqli 或 PDO:

$stmt = $PDO->prepare('select mydataitem,blah FROM users WHERE blah IN ('
.implode(',',array_fill(0,count($stringArray),'?')).')';
$stmt->execute($stringArray);

关于php - SQL 查询从大量字符串列表中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3294432/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com