我有一个应用程序,非常基本的描述:
- 用户登录 -> 他们发布“事件”(如单板滑雪)
- 用户有 friend
- 用户可以绑定(bind)多个好友到activity
- 用户可以“喜欢”好友创建的事件
我需要的是一个查询,以检查是否允许用户“喜欢”他们 friend 之一的事件。仅当其中一位用户 friend 绑定(bind)到目标事件时才允许使用它们。
users: id, name
usersFriends: id, uid, friendUid
activities: id, description
activitiesUsers: id, activityId, uid
activitiesLikes: id, activityId, uid
我希望有人能帮我解决这个问题,如果可能的话,返回 true 或 false。我希望我的问题很清楚,感谢您抽出时间:)
最佳答案
这应该为用户的所有好友生成一个 activities.id
列表。
SELECT
activities.id AS canLikeId
FROM
users u
JOIN usersFriends uf ON u.id = uf.uid
JOIN activitiesUsers au ON uf.friendId = au.uid
JOIN activities a ON a.id = au.activityId
包裹在 EXISTS
中,它看起来像:
SELECT activities.id FROM activities aCanLike
WHERE EXISTS (
SELECT
a.id AS canLikeId
FROM
users u
JOIN usersFriends uf ON u.id = uf.uid
JOIN activitiesUsers au ON uf.friendId = au.uid
JOIN activities a ON a.id = au.activityId
WHERE a.id = aCanLike.id
)
或者带有 IN()
子句的东西,它试图从用户的任何 friend 拥有的 activities
中获取所有内容。
SELECT
activities.*
FROM activities JOIN activitiesUsers ON activities.id = activitiesUsers.activityId
WHERE activitiesUsers.uid IN (
SELECT friendUid FROM usersFriends WHERE uid = $userid
)
关于php mysql连接存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9504726/