我正在尝试创建一个能够跟踪在网站上发布评论的用户的表格。现在,我有一个看起来像这样的表:
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?
答案 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找到用户,由于增量,用户始终是唯一的,并且永远不会被覆盖。