MySQL-列中的列表

时间:2015-03-25 08:13:15

标签: mysql sql database

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

  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?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

但是,如果您有这样的解决方案,那么除了创建用于存储报告< - >用户链接的单独链接表之外别无选择。

答案 2 :(得分:0)

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