1

誰でもこのコードを減らすのを手伝ってくれますか?

$dat=  mysql_query
("SELECT wid,count(*) as count 
  FROM uptime 
  WHERE time_stamp>=DATE_SUB(NOW(),INTERVAL 10 MINUTE) 
  AND  status<>200 GROUP BY wid ORDER BY  time_stamp ASC"
);

while($ans= mysql_fetch_assoc($dat))
{
   $count_array[]=$ans;
}

foreach ($count_array as $value) 
{
   if($value['count']==2)
   {
      $id=$value['wid'];
      $add=  mysql_query("SELECT email FROM website WHERE webid='".$id."'");
      $result=  mysql_fetch_assoc($add);
      <--etc etc to send email-->
    }
}

コードを減らす必要があるので、助けてください。意味を失わずに 2 つのクエリを組み合わせることができれば、私にも役立ちます。

4

3 に答える 3

1

これは、2 つのテーブル間の単純な結合です。

select
    upity.wid,
    webit.email,
    count(*) as count
from
    uptime upity
        join website webby
            on upity.wid=webby.webid
where
    upity.time_stamp>=DATE_SUB(NOW(),INTERVAL 10 MINUTE) 
    and upity.status<>200
group by
    upity.wid,
    webit.email
having count=2

SQL でテーブルを結合することについて、非常に詳細な Q&Aを書きました。実際、私がこれを書いたのは、まさにこの理由からです。簡単なクエリを実行して、何が起こっているかについての詳細な説明にリンクできるようにするためです。

編集: 以下の Zerkms と私の間のコメントに従って、このコードを使用する場合は、実行時間を確認してください。大きなテーブルは、結合すると非常に大きなデータセットになる可能性があり、複数のクエリを実行する方が効率的である可能性があります。

于 2013-09-12T11:16:03.300 に答える
0
$dat=  mysql_query("SELECT wid,count(*) as count 
FROM uptime WHERE time_stamp>=DATE_SUB(NOW(),INTERVAL 10 MINUTE) AND  status<>200 GROUP BY wid ORDER BY  time_stamp ASC");
while($ans= mysql_fetch_assoc($dat)){
if($ans['count']==2){
  $id=$value['wid'];
 $add=  mysql_query("SELECT email FROM website WHERE webid='".$id."'");
$result=  mysql_fetch_assoc($add);
<--etc etc to send email-->
}
}
于 2013-09-12T11:21:07.350 に答える