在在这里发布问题之前我做了几个小时的研究,但没有运气。
让我们从表中的示例开始,以便您轻松理解我想要做什么:
在配置文件表中,我注册了配置文件,它们的 profile_id 是:
john123
joee
smith
hassey
上述个人资料彼此是朋友,朋友表由两个属性组成,即个人资料一和个人资料二。以下是他们如何成为朋友的:
john123 与 joee 成为朋友
约翰123 与史密斯成为朋友
john123 与 Hassey 的朋友
哈西和乔伊的朋友
哈西和史密斯的朋友
当我尝试获取当前登录用户的好友时,它工作正常并使用以下查询返回 true:
$query = $this->db->query("SELECT profile_one, profile_two
FROM friendsTbl
WHERE profile_one = '{$this->myID}' OR profile_two = '{$this->myID}'")
现在我还想获取这些用户的个人资料信息,以便我可以显示他们的名字和姓氏,因此我使用了如下的子查询,但是它返回 false,并且我得到了致命错误:调用成员的错误在非对象上使用 fetch_array() 函数。该错误显示在我使用 while 循环的行上。子查询:
$query = $this->db->query("SELECT profile_id FROM profileTbl
WHERE profile_id IN (SELECT profile_one, profile_two
FROM friendsTbl
WHERE profile_one = '{$this->myID}' OR profile_two = '{$this->myID}')");
如上所述,上面返回错误和致命错误。
我真的很感谢你对此的帮助,因为我已经尝试了一天左右,但没有任何运气。
注意:我在这个项目中使用类和函数,因此它是面向对象的。
@John,在您修改查询之后。以下是正在输出的内容:
注意:未定义索引:第 609 行的 profile_one 注意:未定义索引:第 610 行的 profile_one
以下是好友表
+-------+-----------+------------+
| id |profile_one| profile_two|
+-------+-----------+------------+
| 33 | john123 | hassey |
| 34 | john123 | smith |
| 35 | joee | john123 |
+-------+-----------+------------+
以下是配置文件表:
+-------+-----------+-----------+-------------------+
| u_id | f_name | l_name | profile_id |
+-------+-----------+-----------+-------------------+
| 23 | john | larr | john123 |
| 26 | joee | attwo | joee |
| 27 | smith | Mark | smith |
| 28 | hassey | Mess | hassey |
+-------+-----------+-----------+-------------------+
现在我期望的结果是,无论哪个用户通过传递包含用户会话 ID 的 $this->myid 登录,它都会将这些朋友显示给与他们是朋友的用户。这在我最初发布的原始 sql 语句中有效,但现在我还希望朋友 f_name 和 l_name 显示将配置文件表中的 profile_id 与朋友表中的 profile_one 或 profile_two 相匹配。