我正在尝试创建一个根据日期和用户 ID 记录步骤的表。但是当我运行我的代码时,如果用户每天多次记录他们的步骤,我会碰巧得到重复的行。我不能用唯一键指定日期,因为如果其他用户在同一天记录了步数,那会导致所有其他用户无法记录步数。所以我的观点是,我想删除具有用户 ID 和日期相同的重复行的选项。我有两张 table
表a和表b,我将它们称为something.a和something.b
在使用 $entry = "SELECT * FROM table.a WHERE userid.a = '$user_id.b' AND date=NOW()"
我想用它作为决定 UPDATE
或 INSERT INTO
table.a 的条件。我从以前的查询中得到了 user_id.b
,它按原样工作,所以我暂时保留它。
下面是我查询数据库的方式:
$entry_result = mysqli_query($conn, $entry);
这里用到的是:
if (mysqli_num_rows($entry_result) > 0){
$conn->query("UPDATE steplogger SET steps='$steps' WHERE userid='$user_id' AND date=NOW()");
} else {
$conn->query("UPDATE users SET totalsteps = totalsteps + ('$steps') WHERE username = '$user'");
$conn->query("INSERT INTO steplogger (steps, userid, date) VALUES ('$steps', '$user_id', NOW())");
}
对我做错了什么有什么想法吗?
附言。当我 echo $entry_result
时,我得到一个 mysqli 对象。
最佳答案
正如你所说:
I want to remove the option of having duplicate rows where user id and date
最好的方法是在 user_id
和 date
上创建一个 UNIQUE 索引,这样你就不能插入具有相同 user_id< 的两行
和 日期
。
使用 UNIQUE 索引,您可以使用 INSERT...ON DUPLICATE KEY UPDATE
这将执行您想要的操作:您将插入一个新行(新 user_id
+ date
),如果已存在具有相同 user_id
和 date
的行,您将更新该行。
这是文档:https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html
关于php - 选择 date=NOW()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52990762/