我使用集成在PHP中的imap webmail制作了一个CRM。
我在MySQl数据库上运行一些SQL查询需要一些时间,我打赌有更好的方法可以做到这一点,但我不知道如何。
这就是我所拥有的:
我从IMAP服务器读取的所有电子邮件都是在mysql数据库上编制索引的,所以最初我这样做是为了查询:
$sql = "SELECT * FROM emailaccount WHERE folder='Inbox' ORDER BY uid DESC LIMIT 50";
该查询通常很快,我得到结果并显示它们。
但是在50个结果的循环中,我进行了另一个查询,以查看该电子邮件是否是例如。我这样做:
if ($result=$mysqli->query($sql) or die($mysqli->error.$sql)){
if( $result->num_rows > 0 ){
while ($R = $result->fetch_array()){
//do normal stuff
$wasThisMailAnwsered = AnsweredMail($R["fromaddress"],$R["mailDate"]);
//other normal things
}
}
}
function AnsweredMail($email,$date){
global $mysqli;
$email = addslashes($email);
$pos1 = strpos($email,'<')+1;
$pos2 = strpos($email,'>');
$dif = $pos2 - $pos1;
$mail = substr($email,$pos1,$dif);
$result = $mysqli->query("SELECT * FROM folder WHERE toAddress LIKE '%".$mail."%' AND date> '".$date."'");
if($result->num_rows >= 1){
return true;
}
else{
return false;
}
}
这就是我正在做的事情,当然当我在函数AnsweredMail()中调用第二个查询时,初始查询需要8秒钟。
有更好的方法吗?
提前谢谢。
最好的,
阿尔瓦罗
更新
这是数据库结构,对同一个表进行了2次查询,我先对表进行查询,然后在循环内对其他查询进行同一个表。
'CREATE TABLE IF NOT EXISTS '.$usuarioCorreo.'
(
id INT NOT NULL AUTO_INCREMENT,
uid int,
folder VARCHAR(200),
date DATETIME,
fromAddress VARCHAR(200),
toAddress VARCHAR(200),
cc VARCHAR(200),
cco VARCHAR(200),
subject VARCHAR(200),
body TEXT,
attachments VARCHAR(200),
read VARCHAR(20),
flagged VARCHAR(20),
deleted VARCHAR(20),
PRIMARY KEY(id)
)';