mysql - php mysql 查询连接合并

标签 mysql

我想知道这两个查询是否可以合并,我将解释一下查询的作用。

这是我的表结构:

  • 用户:ID、姓名
  • usersFacebookFriends:id、uid、friendUid
  • 事件:ID、说明、日期、时间
  • activitiesUsers:id、activityId、uid

所以我们有了用户,用户有 friend ,用户可以创建事件并且多个用户可以绑定(bind)到事件。我希望这是清楚的。

SELECT DISTINCT
    A.description, A.date, A.time
FROM
    usersFacebookFriends UF
JOIN
    activitiesUsers AF
ON
    AF.uid = UF.friendUid
JOIN
    activities A
ON
    A.id = AF.activityId
WHERE
    UF.uid = :uid

查询中的uid参数显然是用户id。执行该查询后,我当前执行以下操作:

foreach($activities as $activity){
    // SELECT 
    //     U.id, U.name, U.firstName, U.level
    // FROM
    //     activitiesUsers AF
    // JOIN
    //     users U
    // ON
    //     U.id = AF.uid
    // WHERE
    //     AF.activityId = ?
}

所以它有点双重,在第一个查询中获取所有事件后,我仍然循环遍历所有事件,然后我得到所有用户,是否可以合并这些查询,这样我就不必在获取所有用户后循环事件,如果是的话,怎么样?

感谢帮助

最佳答案

SELECT
  A.description, A.date, A.time,U.id, U.name, U.firstName, U.level
FROM
  usersFacebookFriends UF, activitiesUsers AF, activities A, users U
WHERE
  UF.uid = :uid AND UF.friendUid=AF.uid AND AF.activityId=A.id AND AF.uid=U.id ;

这应该可以解决问题。

关于mysql - php mysql 查询连接合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9192000/

相关文章:

php - 如何在 MySQL 中查找与数字字段相似的行?

php - 如何覆盖 Yii 核心功能?

php - MYSQL:查询以获取上一个和下一个视频 ID?

mysql - 从所有时间获取事件行的峰值

Mysql:使用另一个表的选择最大值更新表

mysql - 当雇主接受他的报价时,商人有多少评级 : 2 cases, 男性和女性雇主

php - 网站首页显示数据库高亮需要SQL

php - 即使从数据库中获取值后,在 codeigniter 3 中获取 undefined index 返回日期?

mysql - 连接加倍结果的问题

php - 统计多值查询