0

我有 3 张桌子

friends
posts
members

friends
========
id, to, from (user_id's), status

there are 3 status's -1 = denied, 0 = no response/new, 1 = accepted



posts
=======
p_id, user_id (same as member_id), text


members
========
member_id, f_name, l_name

如果想从“posts”中的帖子中选择文本,请将其与“members”中的用户名结合起来,并且只显示 user_id 在“friends”表中的帖子。

我想知道它是否可以完成,我在我的查询中尝试了一个 IN() 语句,但它在 IN() 内生成 csv 时产生了一个新问题。我更喜欢通过 mysql 执行此操作,但如果无法完成,我可能会使用全局变量来存储朋友数据(但它不会是最新的,或者在用户结识新朋友时必须刷新)。

4

4 回答 4

1

据我了解,您想查找所有朋友的姓名和帖子,而不是朋友表中的任何朋友......?

您自己的用户 id 在 中$myId,应该这样做(最新帖子优先);

编辑:为朋友添加状态检查

SELECT m.f_name, m.l_name, p.`text`
FROM members m
JOIN posts p 
  ON m.member_id = p.user_id
JOIN friends f 
  ON f.`to` = m.member_id OR f.`from` = m.member_id
WHERE (f.`from` = $myId OR f.`to`= $myId)
  AND f.`status` = 1 AND m.member_id <> $myId
ORDER BY p.p_id DESC
于 2012-08-28T07:20:53.147 回答
0

试试这个 :

    SELECT p.text,m.f_name,m.l_name FROM posts p 
    LEFT OUTER JOIN members m ON p.user_id=m.member_id
    where p.user_id in(select id from friends);

OR

   SELECT p.text,m.f_name,m.l_name FROM posts p 
   LEFT OUTER JOIN members m ON p.user_id=m.member_id
   INNER JOIN friends f on p.user_id=f.id
于 2012-08-28T07:22:57.407 回答
0

如果我理解正确,您有一个 user_id,并且您想要由该用户的“朋友”撰写的所有帖子。此查询从帖子开始,将其加入朋友(其中作者是友谊的“目的地”)(此时 WHERE 子句将过滤掉任何非朋友的帖子),然后加入成员以填写作者的名称信息。

SELECT 
  posts.p_id
  posts.text,
  CONCAT(members.f_name, " ", members.l_name)
FROM 
  posts
  JOIN friends ON posts.user_id = friends.to
  JOIN members ON posts.user_id = members.member_id
WHERE
  friends.from = ?
GROUP BY posts.p_id
于 2012-08-28T07:23:20.080 回答
0

我添加了一个子查询来获取你所有的朋友,因为我假设如果你有这些记录

Friends
==================================
ID      TO       FROM     STATUS
==================================
1       1        2         1
2       3        1         1

而你的member_id = 1,你的朋友是 2、3。对吧?

SELECT  b.f_name,
        b.L_name,
        c.`text`
FROM
    (
        SELECT `to` friendID
        FROM    friends
        WHERE   `status` = 1 AND
                `from` = ?             -- change this to your ID
        UNION
        SELECT `from` friendID
        FROM    friends
        WHERE   `status` = 1 AND
                `to` = ?               -- change this to your ID
    ) a  INNER JOIN members b
            ON a.friendID = b.member_ID
        LEFT JOIN   posts c
            ON a.friendID = c.user_id
于 2012-08-28T07:31:44.743 回答