mysqli查询其他mysqli查询循环内部

时间:2016-04-14 15:00:01

标签: php mysql mysqli

我使用集成在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)
)';

0 个答案:

没有答案