我试图创建一个表,该表根据日期和用户id记录步骤。但是,当我运行代码时,如果用户一天记录几次步骤,就会出现重复的行。我不能有一个具有唯一密钥的日期,因为如果其他用户在同一天记录了步骤,则会导致所有其他用户无法记录步骤。因此,我的观点是,我想删除在用户id和日期相同的地方有重复行的选项。我有两张table
表a和表b,我将它们称为某物。a和某物。b
使用时返回有效行有问题 $entry = "SELECT * FROM table.a WHERE userid.a = '$user_id.b' AND date=NOW()"
我想用它作为一个条件来决定 UPDATE
或者 INSERT INTO
表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对象。
2条答案
按热度按时间m1m5dgzv1#
正如你所说:
我想删除在用户id和日期之间有重复行的选项
最好的方法是在上创建一个唯一的索引
user_id
以及date
,这样您将无法插入具有相同user_id
以及date
.使用唯一索引,可以使用
INSERT...ON DUPLICATE KEY UPDATE
这将实现您想要的:您将插入一个新行(new)user_id
+date
)如果已经有一行user_id
以及date
,您将更新该行。以下是文档:https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html
hsgswve42#
你可以这样试试
要在now()函数中获取当前日期,可以使用此函数。而且两个条件的格式也应该相同。