【问题标题】:MySQL- List inside of a columnMySQL-列内的列表
【发布时间】:2015-03-25 08:13:14
【问题描述】:

我正在尝试创建一个表格来跟踪在网站上报告评论的用户。现在,我有一个看起来像这样的表:

  id   |  num_reports  |  users  
-----------------------------------
 12345         1
 12489         4

对于此表,我希望 id 是唯一的,并且 number_reports 从 1 开始不断递增。但是对于用户,我感到困惑,因为我想保留创建报告的 user_ids 的记录,而我我不确定如何制作,所以我可以存储多个 user_id。

我想过做类似的事情

id   |  user_id
---------------
123      567
123      689

在这种情况下,您只需计算 id 重复且 user_id 唯一的行数,但这似乎效率低下。

我一直在环顾四周,看起来正确的方法是创建另一个表,但这如何让我存储多个 user_id?

【问题讨论】:

    标签: mysql sql database


    【解决方案1】:

    这是正确的做法。这是您应该拥有的:

    USERS                  COMMENTS
    +---------+------+    +------------+---------+------------+---------------------+
    | id_user | name |    | id_comment | id_user | id_article | date                |
    +---------+------+    +------------+---------+------------+---------------------+
    | 171     | Joe  |    | 245        | 245     | 24         | 2015-03-22 10:12:00 |
    | 180     | Jack |    | 1245       | 180     | 68         | 2015-03-23 23:01:19 |
    | ...     | ...  |    | ...        | ...     | ...        | ...                 |
    +---------+------+    +------------+---------+------------+---------------------+
    
    COMMENT_REPORTS
    +-----------+------------+---------+---------------------+
    | id_report | id_comment | id_user | date                |
    +-----------+------------+---------+---------------------+
    | 1         | 245        | 171     | 2015-03-24 16:11:15 |
    | 2         | 654        | 180     | 2015-03-24 18:13:42 |
    | 3         | 1245       | 180     | 2015-03-24 18:34:01 |
    | 4         | 1245       | 456     | 2015-03-25 09:58:10 |
    | ...       | ...        | ...     | ...                 |
    +-----------+------------+---------+---------------------+
    

    然后你就可以得到:

    # Every reports made by an user
    SELECT * 
    FROM comment_reports
    WHERE user_id = 180
    
    # Every reports related to a comment
    SELECT * 
    FROM comment_reports
    WHERE comment_id = 1245
    
    # Every reports made today
    SELECT * 
    FROM comment_reports
    WHERE date >= CURDATE()
    
    # The amount of reports related to an user's comments
    SELECT c.id_user AS User, COUNT(cr.id_report) AS Reported
    FROM comment_reports cr
    JOIN comments c ON (cr.id_comment = c.id_comment)
    WHERE c.id_user = 180
    GROUP BY c.id_user
    

    【讨论】:

      【解决方案2】:

      你在做数据仓库吗?通常不会保存网站的报告数量。它们是通过从保存报告的表中的 website_id 获取 COUNT(*) 来动态计算的。在那里您可以保存制作此报告的用户。然后您可以通过获取报告总数或用户报告总数等来玩。

      但是,如果您有类似的解决方案,那么您别无选择,只能创建单独的链接表来存储报告用户链接。

      【讨论】:

      • 取决于嵌套深度和我不会即时计算的数据量....
      【解决方案3】:

      您可以通过唯一的 id 找到用户,由于增量,用户始终是唯一的,并且永远不会被覆盖。

      【讨论】:

        猜你喜欢
        • 2020-04-04
        • 2012-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多