1

投稿にコメントが追加されたときに、ユーザーにソフトウェア パッケージを通知する MySQL クエリを作成する必要があります。私がこれのために持っているテーブルは

投稿: pid, uid

コメント: cid、uid、pid

ユーザー: uid

関連:rid、uid1、uid2

デバイス: した、uid

投稿には多くのコメントを含めることができ、ユーザーごとに多くのコメントを投稿することができ、ユーザーは多くのデバイスを持っている場合があります。

コメントが挿入されたら、著者を含め、その時点でコメントに貢献した全員の一意のデバイスのリストを取得する必要がありますが、コメントしたユーザーに関連している場合に限られます。

redlated.uid1

ユーザーIDを保持し、

related.uid2

関連するユーザーIDを保持します。

-----------------------------------
| rid       |  uid1      |  uid2  |
-----------------------------------
| 1         |  34        |  43    |
-----------------------------------
| 2         |  43        |  34    |
-----------------------------------

以下のデータを入手しました

PostAuthorId | ポスト ID | ユーザーID

これまでのすべてのクエリが間違っていたため、正しいデータを取得するのに苦労しています。さらに混乱する可能性があると思われるため、投稿していません。

私が言ったように、私はユニークなデバイスだけを返す必要があります.

SQLFIDDLE を編集* *

http://sqlfiddle.com/#!2/4217f


4

2 に答える 2

1

必要なのは 1 つの正しい (マルチ) JOIN だけです

SELECT ...
FROM Posts P
INNER JOIN Users O ON P.uid = O.uid  -- Post owner
INNER JOIN Devices OD ON O.uid = OD.uid  -- Devices of post owner
INNER JOIN Related R ON O.uid = R.uid1  -- Post owner to other user relationship
INNER JOIN Comments C ON R.uid2 = C.uid AND P.pid = C.pid  -- Comments by related user
INNER JOIN Devices CD ON C.uid = CD.uid  -- Devices of users posting comments
WHERE pid = yourPostID

これでうまくいくはずです。
Devices テーブルが 2 つあることを忘れないでください。そのため、OD (所有者の) デバイスと CD (コメント投稿者の) デバイスを介してそれらを参照する必要があります。

于 2012-08-09T16:07:10.657 に答える
0
select distinct d.did from devices d where d.uid in
(select c.uid from comments c where 
c.pid = (select c.pid from comments c where c.cid=@recently_inserted_cid)
union
(select p.uid from posts p where 
p.pid = (select c.pid from comments c where c.cid=@recently_inserted_cid))
)
and d.uid in 
(select r.uid2 from related r where r.uid1 = 
(select c.uid from comments c where     c.cid=@recently_inserted_cid))
于 2012-08-09T16:11:28.107 に答える