将查询放在while循环中是不是很糟糕?

时间:2015-06-10 23:14:24

标签: php

我在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);

谢谢。

2 个答案:

答案 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子句中将你的用户作为目标,所以它没问题。