选择date=now()所在的行?

laawzig2  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(306)

我试图创建一个表,该表根据日期和用户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对象。

xurqigkl

xurqigkl1#

你可以这样试试

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()."))";
}

要在now()函数中获取当前日期,可以使用此函数。而且两个条件的格式也应该相同。

rbl8hiat

rbl8hiat2#

正如你所说:
我想删除在用户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

相关问题