Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将MySql表中的行与PHP中输入的200条记录的JSON数据相匹配_Php_Mysql_Json - Fatal编程技术网

如何将MySql表中的行与PHP中输入的200条记录的JSON数据相匹配

如何将MySql表中的行与PHP中输入的200条记录的JSON数据相匹配,php,mysql,json,Php,Mysql,Json,我有一个数据库,有10000个用户有唯一的电话号码。当有新用户注册时,我会尝试将他的所有联系人(近200到500)与我现有的数据进行匹配,这样我就可以找到他的朋友(比如whats应用程序) 目前我正在使用foreach,它的速度非常慢,因此我需要帮助找到一个可靠的解决方案,以减少多次查询所需的时间 请在下面找到我正在使用的代码 $rawdata= file_get_contents('php://input'); $Matchedcontacts = array(); $jsonArray =

我有一个数据库,有10000个用户有唯一的电话号码。当有新用户注册时,我会尝试将他的所有联系人(近200到500)与我现有的数据进行匹配,这样我就可以找到他的朋友(比如whats应用程序)

目前我正在使用foreach,它的速度非常慢,因此我需要帮助找到一个可靠的解决方案,以减少多次查询所需的时间

请在下面找到我正在使用的代码

$rawdata= file_get_contents('php://input');
$Matchedcontacts = array();
$jsonArray = json_decode($rawdata);
foreach ( $jsonArray as $value)
  {

  $contactNumber = ($value->num);
  $emil= ($value->email);
  $name=mysql_query("select * from TBL_USER where  phone='".$contactNumber ."' OR email='".$email."'");
  while ($nameres= mysql_fetch_array($name))
  {
   $Matchedcontacts [] = array('username'=>$nameres['username'], 'userid'=>$nameres['c_id']);
  }

}

echo json_encode ($Matchedcontacts );

编辑:另外,我正在为我发送的每条记录传递一个本地id。因此,在匹配之后,如何将匹配的记录映射到特定的本地ID?

假设
phone
是某种
索引,那么一次传递所有值应该会更快

$data = array();
foreach( $jsonArray as $value) $data[] = mysql_real_escape_string($value->num);
$name = mysql_query("select * from TBL_USER where  phone IN ('". implode("', '", $data) ."'");

还有,这是你的。考虑切换到<代码> MySQLII< <代码>

< P>一个非常简单的优化是将SQL查询优化为单个查询

首先从
$jsonArray
构建联系人号码列表,然后在下面的SQL查询中使用该数组

select email, username, userid from TBL_USER where  phone IN ( 'phone num 1', 'phone num 2' )

还记得避开那些电话号码,这样就不会有SQL注入

> P>您可能想考虑将联系人列表导入到(临时)表中,并使用Join。< /P>您可以在1查询中使用“Hooin in(PooE1,…,Phone)”来执行。您应该构建一个包含所有数字的数组并使用它。您应该切换到带有PDO或mysql的准备好的语句,以保护自己不受sql注入的影响。有关更多信息,请参见示例。感谢您提供的解决方案,让我试一试:)另外,如果我想匹配,如果电话或电子邮件都匹配,我可以这样做吗?选择来自TBL_USER where phone IN('phone num 1','phone num 2')或email IN('email 1','email 2')的电子邮件、用户名、用户ID是,将返回电话列表中有电话号码或电子邮件列表中有电子邮件的任何用户