ここで質問するのが適切かどうかわかりませんが、試してみます。
私は、e ショップまたはショップ ネットワーク用の一種のソーシャル ネットワークを作成しています。
フォロワーと呼ばれるテーブルがあり、誰がどのショップをフォローしているかを示します
表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 行ずつ読み、フォロワーを取得してメールを送信することです (クローン ジョブを使用してこれを実行します)。
//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 );
しかし、この方法では、1 人のユーザーが 1 日に最大 20 ~ 30 通のメールを受信する可能性があります。
更新されたショップごとに 1 通のメールを送信する代わりに、ユーザーがフォローしている更新されたショップのリストを各ユーザーに送信するためのソリューションまたはアルゴリズムを探しています。
1 つの方法は、すべてのユーザーをループして、フォローしているショップを 1 つずつ取得し、更新されたショップでそれらを探すことです。