我目前正在开展一个项目,用户每发送一条消息就会获得+2分,而他们发送的每张图片都会获得+5分。目前,我正忙于用户的个人资料页面。我有一个盒子,我希望根据这些点,显示该用户的3个最好的朋友。
我还有一个friend_request功能,因为用户可以为公众锁定他们的帐户,所以只有经过批准的朋友才能看到他们最喜欢的内容。所以我做的是,我在我的数据库中的friends表中添加了一个'points'列,因为我将检查最好的朋友。
但是现在我有点卡住..我当前的代码版本只检查'friend_two'用户并排名最高>最低点数。问题是我可以是friend_two而不是'friend_one'而其他人可以'friend_one'而不是'friend_one',这取决于邀请另一个人的人。
如何将其存档,以便检查两列而不仅仅是'friend_two'列?
我的get_bestFriends()函数:
/// BEST FRIENDS FUNCTION - lIMITED TO 3
function get_bestFriends($mysqli, $username) {
//Get the visiting profiles username
$username = safe($mysqli,$_GET["username"]);
//Get all friends out of the database and put it into an array
$showBestFriends = array();
$getBestFriends = mysqli_query($mysqli,"SELECT * FROM friends WHERE ((friend_one = '$username') OR (friend_two = '$username')) AND invited = '1' AND accepted = '1' ORDER BY points DESC LIMIT 3") OR die (mysqli_error($mysqli));
if (mysqli_num_rows($getBestFriends) > 0){
while($row = mysqli_fetch_array($getBestFriends)){
$row = array( 'friend_one' => $row['friend_one'],
'friend_two' => $row['friend_two'],
'points' => $row['points'] );
$showBestFriends[] = $row;
}
//Start displaying the arrays content
foreach ($showBestFriends as $stt):
//Get the avatars of the three best friends
$getBestFriendsAvatar = mysqli_query($mysqli,"SELECT avatar FROM members WHERE username = '".$stt['friend_two']."' ") OR die (mysqli_error($mysqli));
$ava = mysqli_fetch_array($getBestFriendsAvatar);
$avatarURLf = $ava['avatar'];
echo '<div class="best-friend">';
echo '<div class="profileContentBox_avatar">';
echo '<img id="user-avatar" data-title="SHOW USERINFO" title="Avatar from '.$username.'" src="'.$ava['avatar'].'" class="profileContentBox_avatar thumbnail-small" draggable="false">';
echo '<div class="profileContentBox_messages">'.$stt['points'].'</div>';
echo '<div class="profileContentBox_username">'.$stt['friend_two'].'</div>';
echo '</div>';
echo '</div>';
endforeach;
} else {
//There are currently no (best) friends yet
echo '<div style="text-align: center; font-size: 9pt;">No best friends found</div>';
}
}
我只是通过回显函数来显示它们。
答案 0 :(得分:0)
您需要规范化您的数据,以便系统可以处理朋友关系&#34;更一般地说,如果您希望用户能够拥有更多朋友,那么您就不需要添加更多列。
尝试使用此数据库结构:
user
---
id (int) } primary key
name (varchar)
friend_of
---
from_user_id (int, fk) } primary key
to_user_id (int, fk) } primary key
is_invited (bool)
is_accepted (bool)
你也可以删除is_invited
- 在这种规范化的形式中,is_accepted
就足够了。虚假意味着被邀请,真实意味着接受。
要获取特定用户的所有朋友,您可以执行以下操作:
SELECT
user.*
FROM friend_of fo
INNER JOIN user ON (fo.to_user_id = user_id)
WHERE
fo.from_user_id = 123 /* This is the 'from' user */
AND fo.is_accepted = true
答案 1 :(得分:0)
可能已经解决了,最终代码:
// BEST FRIENDS FUNCTION - LIMITED TO 3
function get_bestFriends($mysqli, $username) {
//Get the visiting profiles username
$username = veilig($mysqli,$_GET["username"]);
//Get all friends out of the database and put it into an array
$showBestFriends = array();
$getBestFriends = mysqli_query($mysqli,"SELECT * FROM friends WHERE ((friend_one = '$username') OR (friend_two = '$username')) AND invited = '1' AND accepted = '1' ORDER BY points DESC LIMIT 3") OR die (mysqli_error($mysqli));
if (mysqli_num_rows($getBestFriends) > 0){
while($row = mysqli_fetch_array($getBestFriends)){
$row = array( 'friend_one' => $row['friend_one'],
'friend_two' => $row['friend_two'],
'points' => $row['points'] );
$showBestFriends[] = $row;
}
//Start displaying the arrays content
foreach ($showBestFriends as $stt):
//Get the avatars of the three best friends
//CHECK IF THE $USERNAME IS NOT EQUAL TO FRIEND_ONE.
if ($stt['friend_one'] != $username){
$getBestFriendsAvatar = mysqli_query($mysqli,"SELECT avatar FROM members
WHERE username = '".$stt['friend_one']."' ") OR die (mysqli_error($mysqli));
$ava = mysqli_fetch_array($getBestFriendsAvatar);
$avatarURLf = $ava['avatar'];
} else if ($stt['friend_two'] != $username) {
$getBestFriendsAvatar = mysqli_query($mysqli,"SELECT avatar FROM members
WHERE username = '".$stt['friend_two']."' ") OR die (mysqli_error($mysqli));
$ava = mysqli_fetch_array($getBestFriendsAvatar);
$avatarURLf = $ava['avatar'];
}
echo '<div class="best-friend">';
echo '<div class="profileContentBox_avatar">';
echo '<img id="user-avatar" data-title="SHOW USERINFO" title="Avatar from '.$username.'" src="'.$ava['avatar'].'" class="profileContentBox_avatar thumbnail-small" draggable="false">';
echo '<div class="profileContentBox_messages">'.$stt['points'].'</div>';
//TEST
if ($stt['friend_one'] != $username){
echo '<div class="profileContentBox_username">'.$stt['friend_one'].'</div>';
} else if ($stt['friend_two'] != $username) {
echo '<div class="profileContentBox_username">'.$stt['friend_two'].'</div>';
}
echo '</div>';
echo '</div>';
endforeach;
} else {
//There are currently no (best) friends yet
echo '<div style="text-align: center; font-size: 9pt;">No best friends found</div>';
}
}