Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.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分解WHERE子句中使用的数据_Php_Mysql - Fatal编程技术网

PHP分解WHERE子句中使用的数据

PHP分解WHERE子句中使用的数据,php,mysql,Php,Mysql,我正在从事一个需要维护特定于用户的内容的项目 一个用户在24小时内只能查看一次内容。 24小时后,它将再次提供给同一用户 因此,当用户成功查看内容时,我会将用户的用户名以逗号分隔的值存储在数据库中 例如:当用户user1成功查看内容时,其用户名将与其他用户(如user1、user2、user3等)一起存储在user_status user1中 现在我要检查的是,数据库中是否存在user1用户名 如果它存在,那么在接下来的24小时内,内容将不会提供给他 但由于某些原因,我无法使用if…else从逗

我正在从事一个需要维护特定于用户的内容的项目

一个用户在24小时内只能查看一次内容。 24小时后,它将再次提供给同一用户

因此,当用户成功查看内容时,我会将用户的用户名以逗号分隔的值存储在数据库中

例如:当用户user1成功查看内容时,其用户名将与其他用户(如user1、user2、user3等)一起存储在user_status user1中

现在我要检查的是,数据库中是否存在user1用户名

如果它存在,那么在接下来的24小时内,内容将不会提供给他

但由于某些原因,我无法使用if…else从逗号分隔的用户名组中检查特定用户

我可以用if…else和explode来做,但这不能满足我的需要。我想知道我可以在SELECT语句的WHERE子句中检查一个用户名吗

例如,从用户状态!='的用户数据中选择*$有些事

是否可以先使用explode,然后在WHERE子句中检查它,或者只使用其他方法?如果是的话,怎么办?请帮助我的php专家

有可能是这样的吗

$uname = $_SESSION['username'];//username of the logged in user

$ths = "SELECT * FROM user_data";
        $its = mysql_query($ths) or die(mysql_error());
        $uhs = mysql_fetch_array($its);

                $user_status = explode(',', $uhs['user_status']);// first explode the comma separated usernames

        $ths = "SELECT * FROM user_data WHERE user_status != '".$uname."'";// then check if the logged in username does not exists in the database
        $its = mysql_query($ths) or die(mysql_error());

可以在WHERE子句中检查用户名的分解列表吗?可能吗?或者有什么方法可以做到这一点?如果是,那怎么办?

我认为你的看法完全错了。对于一项非常简单的任务来说,这需要大量的维护。 您可以使用另一个表,在其中保存用户id和数据id对以及时间戳

例如,对于用户数据1和用户1,您将保存:

uid | did | ts
--------------------
  1 |   1 | TIMESTAMP
要检查用户是否观看了某个项目,只需使用用户id和数据id从该表中进行选择。 如果找不到行,或者当前时间戳减去行时间戳的时间超过24小时,请允许用户查看数据,否则-不允许查看数据。

您可以使用LIKE搜索某个字符串以查找另一个字符串:

SELECT * FROM `user_data` WHERE `user_status` LIKE '%user1%';

请参阅:

如果可以,您应该这样做。已在PHP7中删除。了解使用PDO的语句,并考虑使用PDO。。您可能可以使用LIKE,但规范化数据库会更有意义。请显示表结构和数据示例。此问题与您的其他问题有显著差异吗?当然是最佳解决方案。我正在考虑您的答案,以找到解决方法。您没有理解我的问题。。我没有搜索特定用户,因为可能有100个用户,我需要查看当前登录的用户名是否存在。。是的。。。我不能使用LIKE,因为如果用户名不存在,我想获取数据。有什么不喜欢的吗?@LaptopMedico-erh,是的:不喜欢-见上面的文档链接。但如果存在user11或user101,则“%user1%不是false。你真的应该规范化你的数据库来摆脱这种痛苦…你是对的。。如果哪怕只有一个条目与列表中的条目匹配,LIKE和notlike语句也会返回结果。我不能用“喜欢”或“不喜欢”。。还有其他解决办法吗?