我想检查一下我搜索的所有表行中是否存在用户ID。
编辑抱歉,我认为这是误导。 我想检查用户是否已阅读某个类别中的所有文章,我有一个论坛前端显示类别,类别内是文章。
在类别屏幕上我想显示一个图像所有文章读取或不读取所有文章,所以我需要循环浏览每个类别的所有文章,这是下面的示例查询正在做的,并检查用户ID存在于ALL返回的行中,如果是,那么如果有一些行缺少用户ID,那么所有文章都已被读取,那么有些文章尚未被阅读
这是我的SQL查询
$colname_readposts = "-1";
if (isset($_GET['Thread_Category_Article_id'])) {
$colname_readposts = $_GET['Thread_Category_Article_id'];
}
mysql_select_db($database_test, $test);
$query_readposts = sprintf("SELECT Thread_Article_User_Read FROM Thread_Articles WHERE Thread_Category_Article_id = %s", GetSQLValueString($colname_readposts, "int"));
$readposts = mysql_query($query_readposts, $cutthroats) or die(mysql_error());
$row_readposts = mysql_fetch_assoc($readposts);
$totalRows_readposts = mysql_num_rows($readposts);
如何检查返回的所有行是否包含用户ID? 我的想法是检查用户是否已阅读所有文章,如果是,则显示READ,如果没有显示UNREAD。
每行的结果类似于0,15,20,37这些是用户查看帖子时输入的ID。 我已设法对一篇文章进行此检查,以显示用户是否已阅读特定文章但不确定我将如何检查多个文章:
这是我的单篇文章检查:
<?php
$userid = $_SESSION['loggedin_id'];
$userreadlist = $row_readposts['Thread_Article_User_Read'];
$myarray = (explode(',',$userreadlist));
if (in_array($userid,$myarray )){
?>
html image READ
<?php } else { ?>
html image UNREAD
<?php } ?>
任何帮助将不胜感激。 卡尔
答案 0 :(得分:1)
首先,忘记mysql_*
功能;从PHP 5.5开始, ext / mysql 是一个弃用的API - 所以使用mysqli或PDO是个不错的主意。
根据我收集的内容,您实际上是在尝试查看这些结果中是否包含特定用户的 ID?如果是这样,请在SQL查询中执行此操作:
SELECT Thread_Article_User_Read FROM Thread_Articles WHERE
Thread_Category_Article_id = %s AND UserID = %s
并提供此用户ID作为第二个参数。 (语法可能不是100%正确,但它应该证明是重点)
如果您的意思是要在那里查看任何用户的ID - 那么请再次;在SQL中执行此操作:
SELECT Thread_Article_User_Read FROM Thread_Articles WHERE
Thread_Category_Article_id = %s AND UserID IS NOT NULL
这将确保“UserID”的有效值。
如果您的解决方案基于其中一个示例,则自然将'UserID'替换为您的列名。
但是,如果您要从表格中删除所有结果 - 并且您需要查看某个列中是否存在您的用户ID(就像您一样!);那么你实际上只需调整你在单个文章页面上使用的逻辑。哪个应该给你这样的东西......
$userid = $_SESSION['loggedin_id'];
$colname_readposts = "-1";
if (isset($_GET['Thread_Category_Article_id'])) {
$colname_readposts = $_GET['Thread_Category_Article_id'];
}
/* connect to db and run query; CHANGE ME TO SOMETHING NOT DEPRECATED */
mysql_select_db($database_test, $test);
$query_readposts =
sprintf("SELECT Thread_Article_User_Read FROM Thread_Articles WHERE
Thread_Category_Article_id = %s", GetSQLValueString($colname_readposts, "int"));
$readposts = mysql_query($query_readposts, $cutthroats) or die(mysql_error());
/* loop through all returned items */
while($row = mysql_fetch_assoc($readposts)) {
/* repeat the check you used on an individual
row on the single article page. i.e: */
$userreadlist = $row['Thread_Article_User_Read'];
$myarray = (explode(',',$userreadlist));
if (in_array($userid,$myarray )){
/* user has read */
} else {
/* user hasn't read */
}
}
如果您为单个页面工作的代码,那么它应该在上面工作;至于循环的每次迭代,你都在单行上工作 - 就像你在单个页面上一样。如果数据来自同一个表,则列名称等匹配,它将起作用。
或者,如果你只是想知道是否有任何未读帖子,请用这个替换循环......
/* loop through all returned items */
$read = true;
while($row = mysql_fetch_assoc($readposts)) {
/* repeat the check you used on an individual
row on the single article page. i.e: */
$userreadlist = $row['Thread_Article_User_Read'];
$myarray = (explode(',',$userreadlist));
if (! in_array($userid,$myarray )){
$read = false;
break;
}
}
if( $read ){
/* all pages are read */
} else {
/* there are unread pages */
}