就像标题说,试图使用 mysql 和 pdo 在 php 中创建一个朋友列表。 有三个表,一个用户和一个朋友和一个详细信息
用户: 编号 用户名
朋友: 用户标识 朋友ID 地位
详: 简介Img
foreach($db->query('SELECT * FROM FF_Users
LEFT JOIN FF_User_Details ON FF_User_Details.user_id = FF_Users.id
LEFT JOIN FF_UserRoles ON FF_UserRoles.user_id = FF_Users.id
LEFT JOIN FF_ZIP_nb_NO ON FF_ZIP_nb_NO.Postnummer = FF_User_Details.zip
LEFT JOIN FF_User_Settings ON FF_User_Settings.user_id = FF_Users.id
INNER JOIN FF_MyFriends ON ((FF_MyFriends.user_id = FF_Users.id AND FF_Users.id) OR (FF_Users.id = FF_Users.id AND FF_MyFriends.user_id))
GROUP BY FF_Users.id') as $row) {
if ($isFriends) {
echo ' <button type="button" class="btn btn-primary btn-xs pull-right read-only">';
echo ' <i class="fa fa-user"> </i> ' . USERS_ADD_FRIEND;
echo ' </button>';
} else {
echo ' <button type="button" class="btn btn-primary pull-right btn-xs read-only disabled">';
echo ' <i class="fa fa-user"> </i> ' . USERS_IS_FRIEND;
echo ' </button>';
}
}
我在这里做错了什么?只有空白的白页一遍又一遍。
感谢您的所有帮助:)
您关于显示var_dump
object(PDO)#2 (0) { }
的评论让我相信您的查询根本没有返回任何数据。
我不完全确定这是您的问题,因为我无法访问您的数据,但这行对我来说看起来很可疑:
INNER JOIN FF_MyFriends ON (
(FF_MyFriends.user_id = FF_Users.id AND FF_Users.id)
OR
(FF_Users.id = FF_Users.id AND FF_MyFriends.user_id)
)
- 首先,你的条件看起来很奇怪。
- 在第一部分中,您比较
FF_MyFriends.user_id = FF_Users.id
,这似乎没问题,然后AND FF_Users.id
看起来很奇怪。如果你想确保FF_Users.id
不是空的,我建议你明确检查它(AND FF_Users.id IS NOT NULL
)。 - 在第二部分中,您将比较
FF_Users.id = FF_Users.id
,根据定义,它将返回 true。 :)
- 在第一部分中,您比较
- 您在所有其他表上使用
LEFT JOIN
,但INNER JOIN
在该表上使用。这可能意味着没有找到匹配的好友,并且数据库只是不返回任何内容,因为没有进行匹配。
我建议您 a) 重新考虑是否需要INNER JOIN
和 b) 清理您的连接条件。
我在这里猜测了一点,但看起来您正在尝试从任何方向获取用户的所有朋友(即检查用户 A 是 B 的朋友还是 B 是 A 的朋友)。如果是这种情况,请尝试:
SELECT DISTINCT *
-- etc.
INNER JOIN FF_MyFriends ON
FF_Users.id = FF_MyFriends.friendID
OR FF_Users.id = FF_MyFriends.userID
DISTINCT
很重要,因为如果 A 是 B 的朋友,B 是 A 的朋友,你最终会得到同一行两次。
我希望它有所帮助。如果它不是您需要的,请添加有关您需要的注释,确切地说。