选择date = NOW()的行?

时间:2018-10-25 13:41:03

标签: php mysql sql database select

我正在尝试创建一个表,该表根据日期和用户ID记录步骤。但是,当我运行代码时,如果用户每天多次记录他们的步骤,就会碰到重复的行。我无法使用带有唯一键的日期,因为如果任何其他用户当天已记录步骤,则这将导致所有其他用户无法记录步骤。因此,我的意思是,我想删除具有重复行的选项,其中用户ID和日期相同。我有两个桌子

表a和表b,我将它们分别称为something.a和something.b

使用$entry = "SELECT * FROM table.a WHERE userid.a = '$user_id.b' AND date=NOW()"时返回有效行有问题

我想以此为条件来决定创建UPDATEINSERT INTO表。我从先前的查询中获得了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())");
}

对我在做什么错有任何想法吗?

PS。当我echo $entry_result时,我得到一个mysqli对象。

2 个答案:

答案 0 :(得分:3)

如您所说:

  

我要删除具有用户ID和日期重复的行的选项

最好的方法是在user_iddate上创建UNIQUE索引,这样一来,您将无法插入具有相同user_iddate的两行

有了UNIQUE索引,您可以使用INSERT...ON DUPLICATE KEY UPDATE来执行您想要的操作:您将插入新行(新user_id + date),并且如果已经存在一行相同的user_iddate,您将更新该行。

以下是文档:https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html

答案 1 :(得分:0)

您可以尝试这样

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()函数中获取当前日期,可以使用此function。 并且两个条件的格式也应该相同。

相关问题