PHP MySQLi查询循环

时间:2020-08-22 07:57:37

标签: php mysqli

我一直在阅读,但似乎找不到其他解决方法。我正在将android中的JSON发送到我的php文件中,然后我需要遍历它以查看跟踪ID是否已在服务器中,如果没有,请插入服务器中。有时,只有300个条目可能需要5分钟。有更好的方法吗?

$JSON_Received = $_POST["jsonObject"];
$array = json_decode($JSON_Received, true);

foreach ($array as $key => $value)
{
$trackingID = $value['trackingID'];
$name = $value['name'];
$email = $value['email'];

$query = "SELECT * FROM myTable WHERE key_tracking_id = $trackingID";
$result = $link->query($query);

if ($result){
    if($result->num_rows == 0){
        $link->query("INSERT INTO tracking_db (`key_tracking_id`, `key_name`, `key_email`)
            VALUES ('$trackingID', '$name', '$email')");                
    }
}
}

解决方案:

因此,在注释得到一些帮助之后,我将辅助索引添加到数据库中,因为主索引仍遍历整个数据库。这是我为数据库创建的表。

CREATE TABLE `myTable` (
`key_tracking_id` int(11) NOT NULL AUTO_INCREMENT,
`key_name` varchar(255) NOT NULL,
`key_email` varchar(255) NOT NULL,
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 PRIMARY KEY (`key_tracking_id`),
KEY `key_email` (`key_email`)
) ENGINE=MyISAM AUTO_INCREMENT=183298 DEFAULT CHARSET=latin1

1 个答案:

答案 0 :(得分:-1)

您可以通过优化SELECT查询来减少时间。我假设您有一个大型数据库,因为它仅花费300个条目就花费了很长时间。为了找出该行是否存在,而不是SELECT *并获取所有内容,请使用以下命令:

SELECT EXISTS(SELECT * FROM myTable WHERE key_tracking_id = $trackingID) 

这样,即使您正在调用SELECT *,但在找到第一行时它只会停止。

关于插入查询,没有什么要优化的。如果您的服务器还可以优化,那么仅SELECT查询就足够了。