【问题标题】:MySql : making a field unique for each article idMySql:为每个文章ID创建一个唯一的字段
【发布时间】:2012-09-16 11:32:14
【问题描述】:

我只想跟踪每个文章页面的唯一身份访问者。 我制作了一个包含 2 个字段的表格。 article_id 作为 主键ip作为 唯一

预期的输出应该是这样的:

article_id    *       IP
52            -  100.200.300.400
52            -  20.30.20.40
52            -  30.40.50.60
93            -  108.207.302.403
93            -  10.30.20.40

但它不起作用,这就是我得到的:

article_id    *       IP
52            -  100.200.300.400
93            -  10.30.20.40

我想我把键设置错了。

【问题讨论】:

  • ?你的查询是什么,数据库中的数据是什么?

标签: mysql database key


【解决方案1】:

当您将article_id 定义为主键 时,您将永远不会有两条具有相同article_id 的记录。

为避免article_id + ip 对的重复,您可以定义两个字段的唯一索引:article_id AND ip

例如:

CREATE  TABLE `visits` (
  `article_id` INT NOT NULL ,
  `ip` VARCHAR(15) NULL ,
  UNIQUE INDEX `unique_article_ip` (`article_id`, `ip`) )
ENGINE = MyISAM;

【讨论】:

  • 我确实按照你说的定义了他们的数据类型,但我不明白你所说的“两个字段的唯一索引”是什么意思。你的意思是我应该让它们在 phpmyadmin 中都是唯一的?
  • 哦,谢谢!抱歉,我不知道可以在键之间设置 AND
【解决方案2】:

主键也是唯一的,所以它在表中最多显示一次。

定义:关系表的主键唯一标识表中的每条记录。

正确的主键应该是两列。

【讨论】:

  • 不会的,你不能确定这个IP下次不会分配给不同的人——谁实际上可以阅读同一个页面。
  • 没错,但我只是告诉他他将如何获得所需的结果。我假设他对 IP 有所了解。 :)
【解决方案3】:

您需要一个包含以下内容的表格:

ID - 唯一生成的号码,这个将是PK DATE - 访问日期,这将有助于保留来自一个 IP 的唯一访问 ARTICLE_ID - 文章 ID IP - 只是 IP

现在您在以下位置创建 UNIQUE INDEX:ARTICLE_ID、ARTICLE_ID、IP - 可能按此顺序,但这取决于您要执行的 qyeries。通过这种方式,您将每天跟踪文章的唯一 IP。

【讨论】:

    【解决方案4】:

    主键唯一标识一行。一张表最多可以有一个主键,但可以有多个唯一键。您得到的输出清楚地证明了这一点,因为您将article_id 作为主键

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-14
      • 2018-08-14
      • 2011-06-22
      • 2015-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-09
      相关资源
      最近更新 更多