PHP爆炸数据将在WHERE子句中使用

时间:2015-11-11 13:50:14

标签: php mysql

我正在开展一个需要维护用户特定内容的项目。

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

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

例如:当用户parameter成功查看内容时,他的用户名将user1user_status一起存储在user1中,而其他用户则会user1,user2,user3,.......,etc

现在我想要的是检查数据库中是否存在用户名user1的内容。

如果存在,则在接下来的24小时内不会向他提供内容。

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

我可以使用if...else进行爆炸,但这并不能满足我的需要。我想知道我可以在SELECT语句的WHERE子句中检查一个用户名吗?

对于前。像SELECT * FROM user_data WHERE user_status != '".$something."'这样的东西。

首先使用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子句中检查爆炸的用户名列表吗?可能吗?或者有什么方法可以做到这一点?如果是,那么如何?

2 个答案:

答案 0 :(得分:6)

我认为你看错了。这是一项非常简单的任务的维护工作。 你可以只有另一张桌子,在那里你可以保留用户ID和数据ID与时间戳一起对。

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

uid | did | ts
--------------------
  1 |   1 | TIMESTAMP

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

答案 1 :(得分:0)

您可以使用LIKE搜索某些字符串是否存在另一个字符串:

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

请参阅:https://dev.mysql.com/doc/refman/5.7/en/pattern-matching.html