我不确定这是否是一个正确的地方,但我试一试。
我正在为电子商店或商店网络写一种社交网络。
有一个名为追随者的表,它显示谁跟随哪个商店
表1:
追随者
+-----------+---------------------+---------+---------+
| 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作业来运行)
//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家商店!
我正在寻找一个解决方案或算法来发送每个用户,他关注的更新商店列表,而不是每个更新商店的一封电子邮件。
一种方法是遍历所有用户并让每个用户跟随商店并在更新的商店中查找它们,但有几千个用户可能需要数天才能完成。
答案 0 :(得分:0)
我想你想把商店的名字连在一起。类似的东西:
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