Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysql_查询会导致while循环x2_Php_Mysql_Sql - Fatal编程技术网

Php mysql_查询会导致while循环x2

Php mysql_查询会导致while循环x2,php,mysql,sql,Php,Mysql,Sql,我在这里完全被难住了,提前感谢您提供的任何解决方案或建议,我真的非常感谢您能提供的任何帮助 我正在试着做一个备忘录系统。显示备忘录没有问题,但我试图只显示未读备忘录。我有两个表格,一个有备忘录,另一个列出了已读备忘录。 当用户已阅读备忘录时,他/她勾选该框,备忘录id和用户id将添加到“memo_read”表中 因此,基本上我试图从“memo\u read”表中检索已读取的备忘录,然后在用户id和公司正确的位置显示尚未读取的“memo”表中的结果。 正如您所见,我在另一个页面的函数中有两个变量,

我在这里完全被难住了,提前感谢您提供的任何解决方案或建议,我真的非常感谢您能提供的任何帮助

我正在试着做一个备忘录系统。显示备忘录没有问题,但我试图只显示未读备忘录。我有两个表格,一个有备忘录,另一个列出了已读备忘录。 当用户已阅读备忘录时,他/她勾选该框,备忘录id和用户id将添加到“memo_read”表中

因此,基本上我试图从“memo\u read”表中检索已读取的备忘录,然后在用户id和公司正确的位置显示尚未读取的“memo”表中的结果。 正如您所见,我在另一个页面的函数中有两个变量,它们可以正常工作“$user\u id,$company\u id”

我试图在while循环中显示未读备忘录,显示所需的变量。我已经在这方面工作了很长时间,没有任何乐趣,我尝试了我能想到的每一种方法,但我相信你可以告诉我,我不是最有经验的人,我肯定我错过了一些东西或采取了完全错误的方法

<?php
$user_id = $user_data['user_id'] ;
$company_id = $user_data['company'];

$result1 = mysql_query ("SELECT `user`, `memo_id` FROM`memo_read` WHERE `user`= '$user_id '") or die(mysql_error());
while($row = mysql_fetch_array($result1)){
$memo_id   = $row['memo_id']; 


$result = mysql_query ("SELECT `id`, `link`, `author`, `time`, `title`, `company` FROM `memo` WHERE `worker`= 1 AND `company`= '$company_id' AND `id`!= '$memo_id'") or die(mysql_error());
while($row = mysql_fetch_array($result))    {

    $id           = $row['id']; 
    $link         = $row['link'];
    $author     = $row['author'];
    $time        = $row['time'];
    $title         = $row['title'];
    $company  = $row['company'];

?>

<ul>
    <li><?php  echo $title; ?></li>
    <li><?php echo $author; ?></li>
    <li><?php echo $company;?></li>
    <li><?php echo $time;?></li>
    <a href="<?php  echo $link; ?>"> Read memo</a> 
</ul><br>
<?php
}   }
?>

为什么不使用返回未读备忘录的查询?
比如:

 SELECT `id`, 
        `link`, 
        `author`, 
        `time`, 
        `title`, 
        `company` 
   FROM `memo` 
  WHERE `worker`= 1 
    AND `company`= '$company_id' 
    AND `id` NOT IN (SELECT `memo_id` 
                       FROM `memo_read` 
                      WHERE `user`= '$user_id '
                    )
试试这个:

<?php
$user_id = $user_data['user_id'] ;
$company_id = $user_data['company'];

$result1 = mysql_query ("SELECT `user`, `memo_id` FROM`memo_read` WHERE `user`= '$user_id '") or die(mysql_error());
$memo_id_query = '';
while($row = mysql_fetch_array($result1)){
$memo_id_query .= " AND `id`!= '".$row['memo_id']."'";
}


$result = mysql_query ("SELECT `id`, `link`, `author`, `time`, `title`, `company` FROM `memo` WHERE `worker`= 1 AND `company`= '$company_id' ".$memo_id_query) or die(mysql_error());
while($row = mysql_fetch_array($result))    {

    $id           = $row['id']; 
    $link         = $row['link'];
    $author     = $row['author'];
    $time        = $row['time'];
    $title         = $row['title'];
    $company  = $row['company'];

?>

<ul>
    <li><?php  echo $title; ?></li>
    <li><?php echo $author; ?></li>
    <li><?php echo $company;?></li>
    <li><?php echo $time;?></li>
    <a href="<?php  echo $link; ?>"> Read memo</a> 
</ul><br>
<?php
}
?>

强制注释:
mysql.*
已被弃用,请使用
mysqli.*
。您正在运行嵌套查询。除了极少数例外,最好将它们作为一个单独的
JOIN
-ed查询重新编写。另外,请查看
extract()
。当我在另一个查询创建的循环中看到一个查询时,您知道这是一个问题,一个带有JOIN的查询就是您需要的使用
$row=mysql\u fetch\u assoc($result)(请参阅:),它为您节省了一些代码。您可以这样回显:
。虽然这可能会起作用,但当一个结构正确的查询可以完成整个工作时,它仍会对数据库进行多次调用。@MikeW-我认为只需要对数据库进行两次调用。它是写的吗?如果有很多读备忘录,可能会导致非常大的查询和sql缓冲区溢出?我不确定,但我想SQL有一个长度限制sentences@OscarPérez-一切都是有限的:)对于MySQL:在这种情况下,加载数据库和缓冲区应该没有问题。这很好,它工作得很好,我喜欢并理解这个答案,我相信我会反复使用它。可能吧。但我认为suquery让人很容易理解,不是吗?