1

我在数据库中有2个表,表圈和表八卦。
表格圈有 3 列:id、idfrom、idto。
表 gossips 有 id、userid、gossip。
我的目标是仅当此八卦的用户标识(idto)和页面用户的标识(idfrom)在表圈的同一行时才回显所有八卦。我写了这段代码,

$query = 'SELECT * FROM gossips ORDER BY id DESC';
$result = mysqli_query($cxn, $query)
    or die("Couldn't execute query");
$querycircle = 'SELECT idfrom,idto FROM circle WHERE idfrom="{$pageuserid}" ';
$resultcircle = mysqli_query($cxn, $querycircle)
    or die("Couldn't check if user in circle.");
while($row = mysqli_fetch_assoc($result))
{
    while($rowcheck = mysqli_fetch_assoc($resultcircle))
    {
        if($row['userid'] == $rowcheck['idto'] || $row['userid'] == $_COOKIE['id']){
             echo '<div class="gossip">'.$row['gossip'].'</div>';
        }
    }
}

但它似乎不能正常工作。

4

2 回答 2

0

您是否打算mysqli_fetch_assoc($resultcircle))在第一个 while 循环的每一轮中获得相同的数据?

然后你应该首先将这些数据缓冲在一个数组中,因为执行mysqli_fetch_assoc总是会在每次连续调用时为你提供下一个数据集。它不会在数据之上重新启动。

(顺便说一句,这更好while(null !== ($rowcheck = mysqli_fetch_assoc($result))):)


另一种实现目标的方法是只执行一个组合 SQL 请求。

编辑:Sudip Pal 速度很快,看看他对综合请求的回答!;)

于 2013-08-21T11:39:36.270 回答
0

为此尝试单个 SQL 查询,然后尝试使用一个 while 循环。

Select A.gossip from gossips A, circle B where A.userid=B.idto and B.idfrom="{$pageuserid}" order by A.id DESC;

注意:您还可以通过在查询中添加额外的比较来比较 COOKIE 值,例如and B.userid=$_COOKIE["id"](最好将 cookie 值保存在变量中)

于 2013-08-21T11:37:34.253 回答