2012-03-21 167 views
2

我有一个库存mySQL数据库。我需要发送一封电子邮件给几个人,告诉他们“qty”等于还是小于“min”字段中的数字。当mySQL字段等于值时发送电子邮件提醒

有谁知道如何创建一个脚本来已经发送电子邮件中频“数量”等于或小于“分钟”?这可以在服务器端完成吗?

埃里克

DATABASE NAME: _hero  

TABLE NAME:  CARTONS_CURRENT 
+--------------+--------------+--------+--------+-------------------+---------+ 
| Column     |  Type        |  Null  |  Key   |  Default          |  Extra  | 
+--------------+--------------+--------+--------+-------------------+---------+ 
| orig_time  | timestamp    |  No    |        | CURRENT_TIMESTAMP |         | 
| type    | text     |  No    |        |     |        | 
| part_no     | varchar(20)  |  No    |  Prim  |                   |         | 
| description | varchar(75)  |  No    |     |                   |         | 
| count  | varchar(2)   |  No    |     |                   |        | 
| size   | varchar(30)  |  No    |     |                   |         | 
| min   | int(7)    |  No    |     |                   |        | 
| max   | int(7)    |  No    |     |                   |         | 
| qty         | int(8)       |  No    |        |                   |         | 
+--------------+--------------+--------+--------+-------------------+---------+ 
+2

这似乎是一个表触发一个完美的境地,否则你必须有一个脚本不断查询库存水平。 – 2012-03-21 20:21:06

+1

@MikePurcell我的第一个想法是“cron工作!”我很想看看表触发器是如何工作的,我从来没有听说过它们。 – nkorth 2012-03-21 20:25:40

+0

我认为服务器端会更容易。一旦库存水平大于“最小”字段,那么我需要重置脚本以避免循环。 – Erik 2012-03-21 20:28:04

回答

2

我希望你的MySQL/PHP是一个Linux主机上......如果是这样,这是我的建议:

首先,创建一个PHP脚本,将检查数据库,如果条件符合,请发送电子邮件。请记住,该脚本必须可由我的方法中的服务器执行,因为稍后我们将创建一个cronjob来运行脚​​本

将/ usr/bin/php的值更改为您的php路径(使用whereis phpwhich php找到它)

#!/usr/bin/php 
<?php 
//connect to database 
$dbconnect=new mysqli('localhost','username','password','_hero'); 
$result=$dbconnect->query("SELECT `qty`,`min`,`part_no` FROM `CARTONS_CURRENT` WHERE `qty`<=`min`"); 
//if there are any records matching this query we send an email listing each one using 'part_no' as the identifier in this case 
if($result->num_rows>=1) { 
    $email='[email protected]'; 
    $subject = "PRODUCTS OUT OF STOCK"; 
    $message='One or more products are out of stock:\n\n'; 
    while($row=$result->fetch_assoc()) { 
     $message.="{$row['part_no']}\n"; 
    } 
    if(mail($email, $subject, $message)) { 
     //mail successfully sent 
    } else { 
     //mail unsuccessful 
    } 
} 
?> 

保存/退出,使文件的可执行文件(chmod 700或777)

创建cron项执行该脚本每5分钟:

crontab -e

*/5 * * * * /path/to/phpscript 

如果你的MySQL是不是在Linux主机上和/或你没有可执行的PHP设置,您仍然可以使用上面的PHP脚本来完成的工作,但你要么必须手动点一浏览器到脚本位置,或找出执行该脚本的另一种方式。

另外,请检查宗教我的代码,我写在了没有任何语法编辑飞..

+0

cron对我来说是陌生的。不知道cron的去向。 – Erik 2012-03-21 20:38:36

+0

如果您以root身份键入crontab -e,它应该在编辑器中打开您的cron表。在该文件的末尾添加我上面引用的内容,只将/ path/to/phpscript替换为脚本的实际路径。保存/退出文件,crond现在每5分钟执行一次脚本。如果你没有root权限或者没有cron,我也可以告诉你如果你有shell权限,如何把它变成一个守护进程。 – 2012-03-21 20:41:44

+0

如果我有问题,我是否可以通过电子邮件直接向您发送电子邮件。我在大约2个小时后开始做这件事。如果你必须的话, – Erik 2012-03-21 20:45:22

相关问题