像标题一样说,尝试使用mysql和pdo在php中建立朋友列表。 有三个表,一个用户和一个朋友以及一个细节
用户: ID 用户名
朋友: 用户身份 friendID 状态
详细说明: profileImg
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>';
}
}
我在这里做错了什么?只有空白页一遍又一遍。
感谢您的帮助:)
答案 0 :(得分:0)
您对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
不是NULL,我建议你明确检查一下(AND FF_Users.id IS NOT NULL
)。FF_Users.id = FF_Users.id
,它将按定义返回true。 :)LEFT JOIN
,但在{1}}上使用INNER JOIN
。 可以意味着什么是找不到匹配的朋友,并且数据库根本没有返回任何内容,因为没有匹配。我建议你a)重新考虑是否需要INNER JOIN
和b)清理你的加入条件。
我在这里猜测一下,但看起来你正试图在任何方向上抓取所有用户的朋友(即检查用户A是否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是A的B和B的朋友,那么你最终会使用同一行两次。
我希望它有所帮助。如果它不是您所需要的,请准确添加您需要的评论。