0

ここで質問するのが適切かどうかわかりませんが、試してみます。

私は、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 つずつ取得し、更新されたショップでそれらを探すことです。

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 に答える