【问题标题】:Get duplicate columns with a SQL query使用 SQL 查询获取重复的列
【发布时间】:2016-07-01 08:09:07
【问题描述】:

我有一个包含 id_user、firstname 和 name 列的用户表。 我想列出所有重复的值。

我这样做了:

$query = $this->db->select('user.nom, COUNT(*) as count', false)
                        ->from('user')
                        ->group_by('user.nom')
                        ->having('COUNT(*) >', 1);

    return $query->get()->result();

这有效,但仅适用于名称。它给出了重复的名称,并计算了它出现的次数。问题是有时有两个同名但名字不同的用户。如何通过连接两列来检查重复项?

我尝试使用 GROUP_CONCAT 没有成功。我也试过这样做,我想连接名字和名字,然后 group_by 它,但不起作用:

$query = $this->db->select('CONCAT(user.nom, ' ', user.prenom) as usr, COUNT(*) as count', false)
                        ->from('user')
                        ->group_by('usr')
                        ->having('COUNT(*) >', 1);

    return $query->get()->result();

我可以用什么让它工作?

【问题讨论】:

  • user.name 的列名你编辑了什么?
  • @gofr1 我试过了,但是查询不灵了
  • @f_anto 我编辑了它,因为我以前用英文写过,我的专栏是法文的,我不想让你感到困惑,以为我在两个示例中选择了错误的列
  • 好吧,我明白了,你有没有像我的评论一样尝试过?

标签: php mysql sql


【解决方案1】:

双重 GROUP-BY 方法:

$query = $this->db->select('user.name, user.prenom, COUNT(*) as count', false)
                        ->from('user')
                        ->group_by('user.name, user.prenom')
                        ->having('COUNT(*) >', 1);

    return $query->get()->result();

CONCAT 方法:

$sql = "SELECT CONCAT(user.name, ', ', user.prenom) AS name, COUNT(*) FROM user GROUP BY name HAVING COUNT(*) > 1";

加入方法:

$sql = "SELECT * FROM user AS a JOIN user AS b ON a.name = b.name AND a.prenom = b.prenom AND a.id != b.id"

【讨论】:

  • 很高兴为您提供帮助。但也请尝试最后一个。我最喜欢这个解决方案:)
【解决方案2】:

您应该在选择命令中添加全名。 这段代码:

$query = $this->db->select('user.name, COUNT(*) as count', false)
                         ->from('user')
                         ->group_by('user.name')
                         ->having('COUNT(*) >', 1);

请将(添加 user.fullname)更改为:

$query = $this->db->select('user.name,user.fullname, COUNT(*) as count', false)
                        ->from('user')
                        ->group_by('user.name')
                        ->having('COUNT(*) >', 1);

希望它能解决您的问题;)

【讨论】:

    猜你喜欢
    • 2017-09-19
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多