0

我不确定这是不是问这个问题的正确地方,但我试一试。

我正在为电子商店或商店网络编写一种社交网络。

有一个表叫做关注者,它显示谁关注了哪个商店

表格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 行,获取他们的关注者并向他们发送电子邮件(我使用 cron 作业来运行它)

//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 家商店!

我正在寻找一种解决方案或算法来向每个用户发送他关注的更新商店列表,而不是为每个更新的商店发送一封电子邮件。

一种方法是遍历所有用户,让每个用户都关注商店并在更新后的商店中寻找他们,但有几千个用户可能需要几天时间才能完成。

4

1 回答 1

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
于 2013-02-19T18:58:09.113 回答