我的两个表,仅包含相关值,是:
- xx_users(用户 ID、名称、位置)
- xx_posts (post, user_id)
xx_users 包含所有用户,包括当前用户和发布者。
在模拟代码中,我想要实现的是:
SELECT * FROM xx_posts WHERE poster location = user location
鉴于两个表之间的交叉,我将如何处理这个?
如果我很好地理解了您的问题,则解决方案可能类似于:
SELECT * from posts INNER JOIN users ON users.user_id = posts.user_id WHERE users.location = 'the location
'
如果我正确理解了这个问题,您希望查看与当前用户(或另一个给定用户)共享位置的用户发布的所有帖子。在这种情况下:
SELECT p.*
FROM xx_posts p
INNER JOIN xx_users poster ON p.user_id = poster.user_id
INNER JOIN xx_users currentuser ON u1.location = u2.location
WHERE currentuser.user_id = <the id of the user you're interested in>
你想要这个吗?
SELECT p.post,p.user_id,...
FROM xx_posts as p
INNER JOIN xx_users as u
ON p.user_id=u.user_id
WHERE p.location = u.location
要获得两组的交集,请使用INNER JOIN
:
SELECT a.user_id, a.name, a.location, b.post
FROM xx_posts b
INNER JOIN xx_users a ON a.user_id = b.user_id
要根据位置进行过滤,请添加:
WHERE a.location = 'Alaska'
指定列列表也是最佳实践,避免使用SELECT *
.
INNER JOIN