Mysql从多个表连接

时间:2012-08-28 07:12:58

标签: mysql join

我有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

如果要从“帖子”中的帖子中选择文字,请将其与“成员”中的用户名相结合,并仅显示user_id位于“朋友”表中的帖子。

我想知道是否可以完成,我在我的查询中尝试了一个IN()语句,但是它在IN()中生成csv会产生新的问题。我希望通过mysql来做到这一点,但是如果无法完成,我可以使用全局变量来存储朋友数据(但是它不会是最新的,或者当用户获得新朋友时必须刷新)。

4 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分: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

答案 3 :(得分: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