1

我想检查我搜索的所有表行中是否存在用户 ID。

编辑对不起,我认为我误导了。我想检查用户是否阅读了某个类别中的所有文章,我有一个论坛前端显示类别,类别内是文章。

在类别屏幕上,我想显示一个图像 ALL ARTICLES READ 或 NOT ALL ARTICLES READ,所以我需要循环遍历每个类别的所有文章,这就是下面的示例查询正在做的事情,并检查用户 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 } ?>

任何帮助,将不胜感激。卡尔

4

1 回答 1

1

首先,忘记mysql_*功能;ext/mysql是 PHP 5.5 的弃用 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”的值有效。

如果您的解决方案基于这些示例之一,自然会用您的列名替换“用户 ID”。

但是,如果您要从表中导出所有结果 - 并且您需要查看您的用户 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 */
}
于 2013-01-02T01:29:06.807 回答