我在While循环中构建了一个Query来获取用户的状态。这样做有什么问题吗?
我想以不同的方式做到这一点。
我的代码。
$output = array();
while($row = mysqli_fetch_assoc($result))
{
if ($row['user_id'] != $id)
{
$checkstatus= mysqli_query($con,"SELECT session_id, status FROM frei_session WHERE session_id = '".$row['user_id']."' ");
$status = mysqli_fetch_row($checkstatus);
if(!$status[0]){
$row['status'] = 0;
}
$output[] = $row;
}
}
$json = json_encode(array("contacts" => $output ));
print($json);
谢谢。
答案 0 :(得分:1)
它会破坏你的代码并导致非常糟糕的性能,特别是当你的主查询返回很多行时。 SQL-Server可以使用Joins更高效地连接不同的表。对我来说,在这里使用它们似乎是个好方案。特别是LEFT-JOIN可以用于加载会话。当没有与当前用户连接的会话时,它将为请求的字段返回NULL。
但是因为我甚至不知道您的主要查询,或者更不用说代码背后的用法,所以您需要确定没有会话的用户是否在您的案例中有意义。如果没有,请使用EQUAL-JOIN代替。如果没有会话,那么您的查询将不会返回任何数据。
一个例子,当你有两个表USER和SESSION时,这样的JOIN怎么看?
SELECT user.username, user.email,
session.status AS session_status
FROM user, session
WHERE user.userid = 123
AND session.session_id = user.user_id
答案 1 :(得分:0)
在while循环中,我没有看到像你这样的查询有任何问题。如果查询效率低下会产生问题(想象一下,如果查询返回10行而你只需要使用/需要1),但是你在where子句中将你的用户作为目标,所以它没问题。