Php mysql_查询会导致while循环x2
我在这里完全被难住了,提前感谢您提供的任何解决方案或建议,我真的非常感谢您能提供的任何帮助 我正在试着做一个备忘录系统。显示备忘录没有问题,但我试图只显示未读备忘录。我有两个表格,一个有备忘录,另一个列出了已读备忘录。 当用户已阅读备忘录时,他/她勾选该框,备忘录id和用户id将添加到“memo_read”表中 因此,基本上我试图从“memo\u read”表中检索已读取的备忘录,然后在用户id和公司正确的位置显示尚未读取的“memo”表中的结果。 正如您所见,我在另一个页面的函数中有两个变量,它们可以正常工作“$user\u id,$company\u id” 我试图在while循环中显示未读备忘录,显示所需的变量。我已经在这方面工作了很长时间,没有任何乐趣,我尝试了我能想到的每一种方法,但我相信你可以告诉我,我不是最有经验的人,我肯定我错过了一些东西或采取了完全错误的方法Php mysql_查询会导致while循环x2,php,mysql,sql,Php,Mysql,Sql,我在这里完全被难住了,提前感谢您提供的任何解决方案或建议,我真的非常感谢您能提供的任何帮助 我正在试着做一个备忘录系统。显示备忘录没有问题,但我试图只显示未读备忘录。我有两个表格,一个有备忘录,另一个列出了已读备忘录。 当用户已阅读备忘录时,他/她勾选该框,备忘录id和用户id将添加到“memo_read”表中 因此,基本上我试图从“memo\u read”表中检索已读取的备忘录,然后在用户id和公司正确的位置显示尚未读取的“memo”表中的结果。 正如您所见,我在另一个页面的函数中有两个变量,
<?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让人很容易理解,不是吗?