我正在为我的网站创建一个好友列表,用户可以在其中关注,阻止,取消关注和取消阻止其他用户。我的朋友表有3列。较低的用户ID的列,其他用户的列以及将显示其关系的状态列。
user1 | user2 | status
----------------------
1 2 1
1 3 2
2 3 3
我已经创建了一个测试页面来显示登录用户的关系,并根据其状态将其分为几组。以下代码应该显示所有被选中且状态为1的用户。
if (isset($_SESSION['userID'])) {
$userID = $_SESSION['userID'];
$friendsql = "SELECT * FROM friends WHERE user1 = ? OR user2 = ?";
$friendstmt = mysqli_stmt_init($conn);
if (!mysqli_stmt_prepare($friendstmt, $friendsql)) {
echo "error";
}
else {
mysqli_stmt_bind_param($friendstmt, "ii", $userID, $userID);
mysqli_stmt_execute($friendstmt);
$friendresult = mysqli_stmt_get_result($friendstmt);
echo "<div class='friendStatus1'>";
echo "Following";
while (($friendrow = mysqli_fetch_assoc($friendresult)) && ($friendrow['status'] == 1)) {
if ($userID == $friendrow['user1']) {
$otheruserID = $friendrow['user2'];
}
else {
$otheruserID = $friendrow['user1'];
}
$otheruserNamesql = "SELECT userName FROM users WHERE userid = ?";
$otheruserNamestmt = mysqli_stmt_init($conn);
if (!mysqli_stmt_prepare($otheruserNamestmt, $otheruserNamesql)) {
echo "error";
}
else {
mysqli_stmt_bind_param($otheruserNamestmt, "s", $otheruserID);
mysqli_stmt_execute($otheruserNamestmt);
$otheruserNameresult = mysqli_stmt_get_result($otheruserNamestmt);
while ($otheruserNamerow = mysqli_fetch_assoc($otheruserNameresult)) {
echo "<div class='friendBox'>";
echo $otheruserNamerow['userName'];
echo "</div>";
}
}
}
echo "</div>";
当前,我的friends表中有两个与登录用户的状态为= 1的关系,但是我的代码将仅显示第一个关系。我的while循环有一个错误,它只允许第一个关系吐出。有人可以帮我解决我的错误吗?
我的CSS
.friendListContainer {
position: relative;
margin: 60px 0px 37px 0px;
width: 100%;
min-height: calc(100vh - 97px);
max-height: 100%;
background-color: #777;
text-align: center;
vertical-align: top;
}
.friendBox {
width: 70%;
height: auto;
background-color: #555;
vertical-align: top;
padding: 5px;
text-align: center;
margin: 10px auto;
}
.friendStatus1 {
width: 10%;
min-height: calc(100vh - 97px);
max-height: 100%;
background-color: #666;
display: inline-block;
border-left: 1px solid #444;
border-right: 1px solid #444;
vertical-align: top;
}
答案 0 :(得分:2)
您的外部while循环是
while (($friendrow = mysqli_fetch_assoc($friendresult)) && ($friendrow['status'] == 1)) {
因此,如果遇到$friendrow['status'] == 0
所在的行,它将停止循环并忽略其余行(因为它们未排序)。
最好将它作为SQL条件的一部分-如果只希望将这些行添加到SQL中...
SELECT * FROM friends WHERE (user1 = ? OR user2 = ?) and status = 1
(请注意方括号,以确保对运算符进行正确分组)。