困难的PHP / MySQL代码

时间:2016-09-23 22:21:23

标签: php mysql

我有3个数据库表

  1. 用户(用户ID等)
  2. 朋友(friendid,用户ID,friendsuserid)
  3. 更新(updateid,userid,update)
  4. 基本上我编写了一个脚本,可让您通过活动(如状态)更新您的个人资料,并能够成为彼此的朋友(使用朋友表,用户ID + friendsuserid =他们的朋友)

    但是,当显示这些更新的主页时,我可以完全显示我的(用户登录),但朋友更新不显示。

    我遇到了问题,因为它似乎需要发生很多查询,选择登录好友表的用户并获取他们的朋友用户ID ...然后是另一个选择查询来选择所有状态用户登录了id和好友ID。然后是另一个选择查询,从所有用户配置文件中选择信息,以显示其名称和状态。

    目前,我只能想到循环查询并将id放入数组中,然后将数组放入选择查询以获取朋友更新并显示它们。有更好的方法吗?代码是乱七八糟的混乱和我混淆的查询量(基本上每2个为朋友和用户登录)必须是一个更简单的方法大声笑

3 个答案:

答案 0 :(得分:0)

我认为您应该查看JOIN和子查询。 您应该创建一个“子查询” - 选择登录的用户然后加入好友表(以获取所有朋友的userIds),然后使用该列表过滤更新表

basic joins explanation

subquery info

答案 1 :(得分:0)

您可以通过执行与此类似的操作来获取用户和用户更新的更新。

SELECT u.*
FROM updates u INNER JOIN 
   (SELECT friendsuserid as userid FROM friends WHERE userid = [youruserid]
    UNION
    SELECT userid FROM friends WHERE friendsuserid = [youruserid]
   )f
ON u.userid = f.userid

答案 2 :(得分:-1)

Tin Tran,

是的,我似乎得到的就是这个

select u.* from statusupdates u INNER JOIN (select friendsuserid from friends where userid = '2' UNION SELECT userid from friends where userid = '2')f on u.userid = f.friendsuserid;SELECT u.userid,u.email,u.name FROM users u INNER JOIN (SELECT friendsuserid FROM friends WHERE userid = '2' UNION SELECT userid FROM friends WHERE userid = '2')f ON u.userid = f.friendsuserid;
然而,我是否正确地认为这实际上是两个查询?在mysql命令行中(测试查询,看看他们在我编码之前是否给了我需要的东西)给了我所需要的一切。然而,相当肯定mysql不会接受在PHP代码中,因为它是两个查询。我尝试使用内部联接将该用户表添加到它但它似乎不正确

编辑:

在命令行乱搞之后,我设法得到了我需要的东西

  

SELECT s.status,u.name,f.friendsuserid FROM statusupdates s JOIN users u ON s.userid = u.userid JOIN friends f ON u.userid = f.friendsuserid;

但是,这只会给我的朋友更新,而不是我的。我试过把它放在哪里但它不起作用..我能够拉出我现在需要的一切,除了我自己的更新,它只会显示$ _SESSION ['userid']状态和他们的朋友吗?