php - MySql 中的多个内部连接不起作用

标签 php mysql inner-join

我有 3 个表:

用户事件日志

id   userid   activity_type  activity_id   date

这将存储所有用户事件。

请求好友

opid  userid  friendid  requesttime  message  source  requesttype  friendemail  status

这将存储 friend 的详细信息。 useridfriendid 可以是用户的id。如果用户 A 向用户 B 发送了好友请求,那么 userid 将包含 A 的 id,friendid 将是 B 的 id。所以无论如何 B 都是 A 的好友A 是 B 的 friend 。

auth_user_profiles

id  user_id  first_name  last_name  profileimage

存储用户个人资料信息。

我需要的是从useractivitylog 表中选择我所有 friend 的事件。我尝试了以下查询。但它没有用。

    echo "select ua.*,rf.opid,aup.user_id,aup.first_name,aup.last_name,
        aup.profileimage from useractivitylog as ua INNER JOIN requestfriend as rf 
   INNER JOIN auth_user_profiles as aup on
   aup.user_id= IF (rf.userid='$userid',rf.friendid,rf.userid) 
   WHERE (rf.userid=$userid or rf.friendid=$userid)
   and rf.status='2' and ua.userid!=$userid";

这里,$userid 是我的用户 ID。实际上我想要的是检索个人资料信息和我 friend 的用户的事件。但是要知道,即使 userid 不在我的好友列表中,它也会返回 useractivitylog 表中的所有行。

谁能帮我找到一个合适的查询。提前致谢。

最佳答案

您没有正确加入。将 useractivitylog 链接到其他表的唯一条件是它的用户 ID 不是 $userid。对于表中的大多数记录都是如此,因此您几乎得到笛卡尔积(交叉连接)。

顺便说一句:您也没有正确加入 auth_user_profiles,因为您与字符串 '$userid' 进行比较,而不是与 $userid 进行比较。

让我们重新编写语句,以便我们首先检索 friend 并用这些连接其他表:

select 
  ua.*,
  friend.opid,
  aup.user_id,
  aup.first_name,
  aup.last_name,
  aup.profileimage 
from 
(
  select distinct
    case when userid = $userid then friendid else userid end as id,
    opid
  from requestfriend
  where $userid in (userid, friendid) and status = '2'
) as friend
inner join useractivitylog as ua on ua.userid = friend.id
inner join auth_user_profiles as aup on aup.user_id = friend.id;

关于php - MySql 中的多个内部连接不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23053809/

相关文章:

PHP 奇怪的语法 - 它叫什么?

php - IS NULL 与 symfony2 和学说

php - Laravel 关系重新加载

php - 无法使用 PHP 连接到 MySql

python - python 列表中的 WHERE IN 子句

php - 告诉 lessphp 我必须检查一个文件夹而不仅仅是一个文件来刷新 output.css?

MySQL 从 JSON 对象数组中选择字段

php - 获取数组时出错 - CRUD PHP/MYSQL

mysql - 具有内连接优化的 SQL 更新查询

php - 需要有关评论审核的 SQL 查询帮助