我正在开展一个需要维护用户特定内容的项目。
一个用户只能在24小时内查看一次内容。 24小时后,它将再次提供给同一用户。
因此,当用户成功查看内容时,我将用户的用户名以逗号分隔的值存储在数据库中。
例如:当用户parameter
成功查看内容时,他的用户名将user1
与user_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子句中检查爆炸的用户名列表吗?可能吗?或者有什么方法可以做到这一点?如果是,那么如何?
答案 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