【问题标题】:Replacing MySQL Records?替换 MySQL 记录?
【发布时间】:2010-11-18 18:09:58
【问题描述】:

我正在开发一个自定义论坛并尝试设置一个表格来跟踪哪些用户查看了哪些主题。

表格很简单。 thread_id、user_id、thread_view_date。

每次有人查看一个线程时,它都会使用 thread_id、user_id 和查看日期更新表,以便系统知道他们是否查看了一个线程。

我遇到的麻烦是替换记录。

到目前为止,它只是添加新记录。因此,如果用户要查看一个线程 3 次,它将插入 3 条记录,以更新旧记录的查看时间。

我目前正在线程页面上使用它

$viewed_sql = "
        REPLACE INTO forum_thread_views (
            thread_id,
            user_id,
            thread_view_date
        ) VALUES (
            '$thread_id',
            '$_SESSION[user_id]',
            '$date'
        )
    ";
$viewed_query = @mysqli_query ($db_connect, $viewed_sql);

如果用户已经查看了话题,那么更新 thread_view_date 的最简单方法是什么,如果没有创建新记录?

谢谢。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    首先为“thread_id, user_id”对添加唯一键。

    ALTER TABLE forum_threads_views ADD UNIQUE KEY (thread_id, user_id)
    

    然后将您的查询重写为这个

    INSERT INTO forum_thread_views (
            thread_id,
            user_id,
            thread_view_date
        ) VALUES (
            '$thread_id',
            '$_SESSION[user_id]',
            '$date'
        ) ON DUPLICATE KEY SET thread_view_date='$date'
    

    【讨论】:

    • +1 用于查询,但您的 ON DUPLICATE KEY 子句中有错误,它是 UPDATE 而不是 SET。并且为了避免额外的变量替换并使用插入的 thread_view_date 值,我会编写这样的子句ON DUPLICATE KEY UPDATE thread_view_date=VALUES(thread_view_date)
    • 经过一些测试后我遇到的唯一问题是,如果您查看不同的线程,它会更新旧记录时间。需要为每个线程创建一个新条目。
    • 知道了。它没有正确配对。唯一键 thread_id (thread_id, user_id)
    猜你喜欢
    • 2012-03-26
    • 2011-10-24
    • 2013-10-02
    • 2020-01-13
    • 2015-02-21
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多