为什么这会在MySQL中重复记录?

时间:2014-05-30 06:52:26

标签: php mysql sql session

执行查询时:

SELECT
  follow.fgid,
  up.upblog,
  up.dataid,
  `data`.`name`,
  `data`.image,
  up.upid,
  up.datecreated
FROM follow
  INNER JOIN up
    ON follow.fgid = up.dataid
  INNER JOIN `data`
    ON `data`.dataid = follow.fgid
WHERE follow.frid = '$_SESSION[userid]'
     OR up.dataid = '$_SESSION[userid]'

我得到了下一个输出:

fgid  upblog    dataid  name       upid  datecreated

6     postno1   6       himanshu     1     2014=05-29
4     postno5   4       chin         1     2014=05-29
2     postno6   2       hit          1     2014=05-29
1     postno7   1       meet         1     2014=05-29
1     postno7   1       meet         1     2014=05-29
1     postno7   1       meet         1     2014=05-29
1     postno7   1       meet         1     2014=05-29
1     postno7   1       meet         1     2014=05-29
1     postno7   1       meet         1     2014=05-29
4     postno8   4       chin         1     2014=05-29

为什么这会在MySQL中重复记录?

2 个答案:

答案 0 :(得分:1)

如果您只想从查询中获取不同的值,则需要将SELECT替换为SELECT DISTINCT 问题因为它们重复,取决于表格中的数据以及joinwhere条件。

答案 1 :(得分:0)

您可以通过dataid(在下表中调用fgid)来连接表。我想这是数据表的主键。但它在表格中并不是独一无二的。因此,假设您有三个条目用于跟随数据ID 1,两个用于总共六个条目(三个两个)。

使用以下命令查看表中的记录:

SELECT * from follow where fgid = 1;

SELECT * from up where dataid = 1;

这为您提供了在结果中看到重复记录的原因。然后想想你想要看什么。也许只是在结果中显示一个额外的字段,这样您的记录就不再重复了?或者你想看到所有的组合,但每个组合只有一次?然后使用DISTINCT。或者您想在结果中查看最大日期和最小upblog等?然后按dataid分组,并根据您的意愿汇总所有其他列。