我有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来做到这一点,但是如果无法完成,我可以使用全局变量来存储朋友数据(但是它不会是最新的,或者当用户获得新朋友时必须刷新)。
答案 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