php mysql连接存在

标签 php mysql

我有一个应用程序,非常基本的描述:

  1. 用户登录 -> 他们发布“事件”(如单板滑雪)
  2. 用户有 friend
  3. 用户可以绑定(bind)多个好友到activity
  4. 用户可以“喜欢”好友创建的事件

我需要的是一个查询,以检查是否允许用户“喜欢”他们 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/

相关文章:

mysql - LEFT JOIN 查找不同表中两列的总和

mysql - MySQL 一天内多个项目的单独计数

java - 如何在 Talend 中使用 LIKE 运算符和上下文变量 MySQL 从数据库中删除

javascript - jQuery - 通过输入或 td 选择复选框时停止传播

javascript - 从 ajax 响应中选择文本并在用户单击项目时显示在输入字段中

php - 检测ajax请求

php - 计算特定 ID 的行数

java - 为什么 Spring Boot MVC 总是从我的表单返回 null 值?

mysql - 如何在mysql的SYSDATE()中减去一个月?

php - 由另一个表约束的两行的最大值