假设我们有一个名为posts
and的数据表users
。显然,users
包含赌徒的数据(带有一个方便的id
字段和points
他们拥有的点数),并posts
包含post_id
行的 ID 字段,user_id
即用户的 ID,value
以及发布的数字本身。
现在您只需在脚本中实现以下 SQL 查询:
UPDATE users INNER JOIN posts ON users.id = posts.user_id SET users.points = (users.points + 1)
WHERE posts.value = 0;
末尾0
的位置将替换为随机抽取的数字。
这个查询会做什么?使用该INNER JOIN
构造,它将在两个表之间创建一个链接。自动,如果posts.value
匹配我们的号码,它将链接 posts.user_id
到users.id
,知道哪个用户必须points
修改他/她。如果有人赌博0
,并且他的 ID( posts.user_id
) 是8170
,则该points
字段将为拥有的用户更新user.id = 8170
。
如果您更改查询以使其成为(users.points - 1)
和WHERE posts.value != 0
,您将让非获胜者扣除一分。它可以根据需要进行调整。
小心点!每次每日抽奖后,帖子表都需要截断或存档。
另一种选择是存储time()
用户投注数字的时间戳(在 PHP 中),并在执行时检查存储的时间戳......是否在当天的开始和结束之间。
提示:您可以使用图形数据库软件(如 Microsoft Access 或 LibreOffice Base)JOIN
在图形显示器上模拟您的 s 等。它使初学者更容易建模此类问题。如果您不想要桌面安装的软件,尝试安装phpMyAdmin
也是另一种解决方案。
编辑:
非关系数据库
如果您要使用非关系型数据库,您首先需要获取所有获胜者ID
:
SELECT user_id FROM posts WHERE value=0;
这将为您提供多行的结果。现在,您将需要逐一检查此结果,并执行以下查询:
UPDATE users SET points=(users.points + 1) WHERE id=1;
(0
是中奖号码,是用户更新1
的并发数。)id
不使用 MySQL 的关系功能,但使用 MySQL 数据库,脚本将如下所示:
<?php
$number = 0; // This is the winning number we have drawn
$result = mysql_query("SELECT user_id FROM posts WHERE number=" .$number);
while ( $row = mysql_fetch_assoc($result) )
{
$curpoints_result = mysql_query("SELECT points FROM users WHERE user_id=" .$row['user_id']);
$current_points = mysql_fetch_assoc($curpoints_results);
mysql_query("UPDATE users SET points=" .($current_points['points'] + 1). " WHERE user_id=" .$row['user_id']);
}
?>
该while
构造使此循环一直运行,直到结果(获胜者列表)的每一行都被更新。
哦,我知道MySQL 是一个关系数据库,但它就是它的本质:一个示例。