【问题标题】:Updating read/unread table upon post insertion插入后更新已读/未读表
【发布时间】:2012-05-26 18:46:23
【问题描述】:

我正在尝试创建一个单独的表来跟踪已读/未读帖子。使用MySQLi 我将有两个表itemsitems_tracking。当页面被渲染时,它将加入表格并检查用户是否阅读了帖子。

items
+-------+------------+----+
|  id   | created_by | .. |
+-------+------------+----+
| item1 | id12       | .. |
| item2 | id433      | .. |
+-------+------------+----+

items_tracking
+---------+---------+------+
| user_id | item_id | read |
+---------+---------+------+
| id1     | item1   |    0 |
| id2     | item2   |    0 |
| id94    | item1   |    1 |
+---------+---------+------+

现在的想法是,每当在 items 表中创建新项目/帖子时,它还将在 items_tracking 表中为所有用户创建行,并在列 read = 0 中创建行。问题是,我不知道如何解决这个问题,因为我将在 items_tracking 中使用的外键仍然几乎未确定。

关于如何同时插入两个表,而第二个表引用第一个表的任何想法?

【问题讨论】:

    标签: mysql database foreign-keys


    【解决方案1】:

    您不需要跟踪表中 read=0 的记录。

    SELECT ..., t.read FROM items i LEFT JOIN items_tracking t ON (t.item_id = i.id)
    

    即使items_tracking中没有对应的记录,这个查询也会起作用;在这种情况下,结果中的 t.read 将是 NULL。你只需要插入带有read = 1的记录,虽然你甚至不需要这个标志,你测试t.item_id IS NOT NULL看看你在items_tracking中有没有记录。

    【讨论】:

    • 呸,你是对的!我沉浸在这个问题中,想不出这么简单的解决方案。但是,如果您只想列出未读项目怎么办。如何仅选择/显示 items_tracking 表中不存在对应项的那些项目?我想我会通过在items 表上做一个SELECT 来解决它,然后对于每个项目,我会再做一个SELECT 找出items_tracking 表中是否存在一行,如果不存在,我什至不会渲染它。对吗?
    • SELECT ... FROM items i LEFT JOIN items_tracking t ON (t.item_id = i.id) WHERE t.item_id IS NULL
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    相关资源
    最近更新 更多