php - 选择 date=NOW()?

标签 php mysql sql database select

我正在尝试创建一个根据日期和用户 ID 记录步骤的表。但是当我运行我的代码时,如果用户每天多次记录他们的步骤,我会碰巧得到重复的行。我不能用唯一键指定日期,因为如果其他用户在同一天记录了步数,那会导致所有其他用户无法记录步数。所以我的观点是,我想删除具有用户 ID 和日期相同的重复行的选项。我有两张 table

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

在使用 $entry = "SELECT * FROM table.a WHERE userid.a = '$user_id.b' AND date=NOW()"

我想用它作为决定 UPDATEINSERT 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_iddate 上创建一个 UNIQUE 索引,这样你就不能插入具有相同 user_id< 的两行日期

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

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

关于php - 选择 date=NOW()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52990762/

相关文章:

php - 在 laravel 5.3 中实现命名空间

javascript - 将可拖动的 JQuery UI 放入 Droppable 部分后禁用它

php - 如果两个用户同时处理检查,则使用 PHP、MySQL 和 Ajax 实现用户名可用性

sql - Elasticsearch 通过两个字段之一进行匹配

php上传文件错误代码3

javascript - 无效值错误: setPosition: not a LatLng or LatLngLiteral: not an Object

mysql - 尝试使用 phpMyAdmin 创建 MySQL 触发器,但出现 MySQL 错误 #1422

php - 孟加拉字体的 JSON 编码错误

sql - 在 SSRS 查询中显示从日期开始的年月

sql - Oracle RTRIM 的削减量超出了要求