2012-03-21 127 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

相關問題