【问题标题】:Difficult PHP/MySQL code困难的 PHP/MySQL 代码
【发布时间】:2016-09-23 22:21:23
【问题描述】:

我有 3 个数据库表

  1. 用户(用户 ID 等)
  2. 朋友(friendid,userid,friendsuserid)
  3. 更新(更新ID、用户ID、更新)

基本上,我编写了一个脚本,让您可以使用活动(如状态)更新您的个人资料并能够彼此成为朋友(使用朋友表,用户 ID + 朋友用户 ID = 他们的朋友)

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

我遇到了问题,因为似乎需要进行很多查询,以选择登录到朋友表中的用户并获取他们的朋友用户 ID...然后它是另一个选择查询来选择所有状态用户登录ID和朋友ID。然后另一个选择查询从所有用户个人资料中选择信息以在状态旁边显示他们的姓名。

目前,我只能想到循环查询并将 id 放入一个数组中,然后将该数组放入一个选择查询中以供朋友更新并显示它们。有没有更好的方法?代码是一团糟,哈哈,我对查询的数量感到困惑(对于朋友和登录的用户,基本上每个 2 个)必须是一种更简单的方法,哈哈

【问题讨论】:

标签: php mysql


【解决方案1】:

我认为您应该研究 JOIN 和子查询。 你应该做一个“子查询”——选择登录的用户,然后加入朋友表(获取所有朋友的 userId),然后使用该列表过滤更新表

basic joins explanation

subquery info

【讨论】:

    【解决方案2】:

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

    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
    

    【讨论】:

    • 这是一个梦想,但是我如何才能选择只有用户 ID 等朋友的所有用户配置文件?因为现在我已经得到了朋友的所有更新,我需要获取用户表上的用户信息,以用于链接和名称等的更新。另外,你能解释一下那个查询吗?
    • 只需内部联接 f 与用户表(查找内部联接)。
    • 解释查询,f 是子选择,返回用户 ID 的朋友的用户 ID,UNION 和用户 ID 是朋友的用户 ID。
    • 我已经回复了,不知道这个网站如何处理通知
    【解决方案3】:

    锡特兰,

    是的,我似乎只能得到这个

    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'] 状态和他们的朋友吗?

    【讨论】:

    • 不是和朋友一起加入,而是加入 (...)f
    • 我的别名 f 只是一个子查询,它像一个包含您感兴趣的所有用户标识的表一样返回...对于 [youruserid]
    • SELECT s.status,u.name,f.friendsuserid FROM statusupdates s JOIN users u ON s.userid=u.userid JOIN (SELECT friendsuserid as userid FROM friends WHERE userid = [youruserid] UNION SELECT userid FROM friends WHERE friendsuserid = [youruserid] )as f ON u.userid=f.userid;
    • 如果我发布 db 架构让您知道我需要什么和拥有什么会更容易吗?
    • 加上如果我删除主页上的朋友表的全部内容(运行此状态),即使登录用户的更新也不会显示
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    • 2015-07-17
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    • 2018-10-05
    相关资源
    最近更新 更多