什么更好;mysql调度器还是php脚本和crontab?

什么更好;mysql调度器还是php脚本和crontab?,php,mysql,Php,Mysql,我有一个mysql表,其中有数千行。我使用它作为用户的事务历史记录。我还在同一页上查询该表,以获得每种产品的总收益。这里是我的两个mysql调用 $earnperproduct = mysqli_query($con,"SELECT product, SUM(amount) AS totalearn FROM wp_payout_history WHERE user=$userid GROUP BY product"); $result = mysqli_query($con,"SELECT *

我有一个mysql表,其中有数千行。我使用它作为用户的事务历史记录。我还在同一页上查询该表,以获得每种产品的总收益。这里是我的两个mysql调用

$earnperproduct = mysqli_query($con,"SELECT product, SUM(amount) AS totalearn FROM wp_payout_history WHERE user=$userid GROUP BY product");
$result = mysqli_query($con,"SELECT * FROM wp_payout_history WHERE user=$userid ORDER BY date DESC");
我担心的是,随着表的增长,
$earnperproduct
调用将变得过于密集,从而降低页面加载速度。因此,与每次加载页面时都执行sum命令不同,我认为每当
wp\u summary\u table
更改
wp\u payout\u history
以每个用户和产品的新的
sum(AMOUNT)
值替换过去的值时,更新摘要(例如
wp\u summary\u table
)会更容易;从而质疑这样的事情,

$earnperproduct = mysqli_query($con,"SELECT * FROM wp_payout_summary_table WHERE user=$userid ORDER BY product DESC");
TL;DR
使用
$earnedperproduct
样式调用更新表的最佳方法是什么?使用mysql事件调度器还是使用带有crontab的php脚本更好?有没有教程可以帮助我根据自己的需要创建任意一个选项?

您提到的两种控制机制都使用时间作为动作的触发器。但是您的描述说,您确实希望在数据更改时触发操作。在关系数据库中,在数据更改时触发操作的最佳方法是使用。。。。。这使你的问题成为一个难题

可以说,快照事务可能更有效,而不是像

 [INSERT INTO summary_table (user, total_amount, last_id) ]
 SELECT 
   user, SUM(amount), MAX(id)
 FROM (
    SELECT a.user, a.total_amount AS amount, a.last_id
    FROM summary_table a
    WHERE a.user=$user_id
    AND last_id=(SELECT MAX(b.last_id)
       FROM summary_table b
       WHERE b.user=$user_id) 
    UNION
    SELECT h.user, h.amount, h.id
    FROM wp_payout_history h
    WHERE h.user=$user_id
    AND h.id>(SELECT MAX(c.last_id)
       FROM summary_table c
       WHERE c.user=$user_id)
 ) ilv
 GROUP BY user;

…那么,使用什么刷新历史记录并不重要-查询将始终为您提供最新的响应。如果按此方法进行,则在汇总表中添加一个伪整数列,并将
0作为未聚合行添加到第二个选择中,将
SUM(1)
添加到第四个选择中,以确定何时更新汇总表最有效。

这取决于具体情况,但我更愿意将其置于版本控制中。我同意,但我的原始价值观永远不会改变,所以从技术上讲,我将永远拥有它们。。。即使
摘要表中出现了问题
警告:使用
mysqli
时,您应该使用and将用户数据添加到查询中。不要使用字符串插值或串联来完成此操作,因为您已经创建了严重的错误。切勿将
$\u POST
$\u GET
或任何用户数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。注意:
mysqli
的面向对象界面明显不那么冗长,使代码更易于阅读和审核,并且不容易与过时的
mysql\u查询
接口混淆。在你对程序性风格投入太多之前,值得换一种。示例:
$db=new mysqli(…)
$db->prepare(“…”)
过程接口是php4时代引入
mysqli
API时的产物,不应在新代码中使用。