Php sulotion通过一封电子邮件通知用户他们最喜欢的更新店铺
我不确定这是不是一个合适的地方问这个问题,但我尝试一下 我正在为电子商店或商店网络编写一种社交网络 有一个名为followers的表,它显示了跟踪哪个商店的人 表1: 追随者Php sulotion通过一封电子邮件通知用户他们最喜欢的更新店铺,php,mysql,Php,Mysql,我不确定这是不是一个合适的地方问这个问题,但我尝试一下 我正在为电子商店或商店网络编写一种社交网络 有一个名为followers的表,它显示了跟踪哪个商店的人 表1: 追随者 +-----------+---------------------+---------+---------+ | id | shop_id | user_id | date | +-----------+---------------------+---------+----
+-----------+---------------------+---------+---------+
| id | shop_id | user_id | date |
+-----------+---------------------+---------+---------+
| 1 | 1 | 23 |392185767|
+-----------+---------------------+---------+---------+
| 2 | 1 | 34 |392333337|
+-----------+---------------------+---------+---------+
每次商店发布产品时,我都会将其放在更新表中(如果还没有),以跟踪更新的商店
表2:
更新
+-----------+---------------------+----------+---------+
| id | shop_id |UPcounter | UPdate |
+-----------+---------------------+----------+---------+
| 1 | 2 | 1 |392185767|
+-----------+---------------------+----------+---------+
| 2 | 1 | 3 |392333337|
+-----------+---------------------+----------+---------+
所以问题是,我想通过电子邮件通知追随者他们最喜欢的商店的更新
最简单的方法是每次阅读更新后的店铺1行,找到他们的追随者并向他们发送电子邮件,我使用crone job来运行此功能
//select one updated shop
$uopdated_shop = $db->query("select updates.* , shops.* from updates JOIN shops ON updates.shop_id = shops.id LIMIT 1");
if(!$uopdated_shos){ exit; }
// get it's followers
$followers = $db->query(" slsect f.* , u.* from followers f JOINE users u ON f.user_id = u.id
where f.shop_id = $uopdated_shop->id JOIN ");
$email->send($followers , $uopdated_shop , $sleep_betwwen_emails = 200 );
但这样一来,一个用户每天可能收到多达20-30封电子邮件。。。假设他在跟踪20-30家商店
我正在寻找一种解决方案或算法,向每个用户发送他所关注的更新店铺列表,而不是为每个更新店铺发送一封电子邮件
一种方法是在所有用户中循环,让每个用户跟踪商店,并在更新的商店中查找他们,但是有几千个用户可能需要几天才能完成 我想你应该把商店的名字连在一起。比如:
select u.*, group_concat(s.shop_name)
from followers f JOIN
users u
ON f.user_id = u.id join
updates up
on up.user_id = f.user_id join
shops s
on up.shop_id = s.shop_id
where f.update > <whatever update time>
group by u.user_id
将这两个查询结合起来,这样就可以得到一个用户更新商店的列表?否则就颠倒顺序。首先获取用户列表,然后检查该用户的更新商店。@MarcB thanx,但我不能一次发送所有这些电子邮件,用户可能会达到数千人。循环所有用户不是一个好主意,但这就是重点。您将获得一个用户列表,然后为每个用户检查哪些商店是新的。您构建一封电子邮件,列出特定用户的商店,然后发送一封电子邮件。你的方法是好的,商店1。。。哪些用户在这台计算机上?发垃圾邮件!下一个商店2。发送更多垃圾邮件等。。。。除非您的查询需要非常长的时间才能运行,否则这将比每个用户发送一封电子邮件要高效得多,而不是更新的店铺*用户电子邮件。如果您不想在所有更新的店铺中循环,请在此时检索数量有限的店铺和用户。例如,您可以执行{}while$shopsRetrievedAmount,在这个循环中,检索当时的5个商店,在另一个这样的循环中检索当时的200个用户it@MarcB你说得很好,谢谢。