Php 基于名字和姓氏查找重复记录的MYSQL查询

Php 基于名字和姓氏查找重复记录的MYSQL查询,php,mysql,sql,Php,Mysql,Sql,我有一个包含以下列的用户表,我提出了一个查询,根据名字和姓氏识别重复记录 表结构 CREATE TABLE IF NOT EXISTS `User` ( `id` bigint(20) NOT NULL, `address1` text COLLATE utf8_unicode_ci, `mobile` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL, `name` varchar(45) COLLATE utf8_unicode

我有一个包含以下列的用户表,我提出了一个查询,根据名字和姓氏识别重复记录

表结构

CREATE TABLE IF NOT EXISTS `User` (
  `id` bigint(20) NOT NULL,
  `address1` text COLLATE utf8_unicode_ci,
  `mobile` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
  `name` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `firstName` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL,
  `lastName` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL,
  `username` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  `password` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `email` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `gender` tinyint(2) NOT NULL DEFAULT '0' COMMENT '1 - female, 2-male, 0 - unknown',
  `zip` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
  `countryCode` varchar(3) COLLATE utf8_unicode_ci DEFAULT NULL,
  `joinedDate` datetime DEFAULT NULL,
  `dateOfBirth` date DEFAULT NULL COMMENT 'User date of birth'
) ENGINE=MyISAM AUTO_INCREMENT=63561 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 
还有我的问题

SELECT id, firstName, lastName, mobile, email, count(*) as dupCount 
FROM `User` `t` 
WHERE firstName is not null and lastName is not null 
GROUP BY firstName,lastName HAVING count(*) > 1 
ORDER BY t.joinedDate DESC
下面是我运行查询时结果的屏幕截图

我的数据集就在这里

很抱歉,如果粘贴站不工作。试试这个

当有电子邮件地址为空的记录时,我们有一个问题。我总是犯这样的错误

1062-钥匙“组钥匙”重复输入“Rachel Besnainou”

我运行的查询是:

SELECT id, firstName, lastName, mobile, email, count(*) as dupCount 
FROM `User` `t` 
WHERE firstName is not null and lastName is not null 
GROUP BY firstName,lastName 
HAVING count(*) > 1
我不知道为什么会出现这个错误。谢谢你的帮助

更新1

我尝试将其添加到我的数据库中,并运行了查询,但结果仍然是一样的

SET SESSION max_heap_table_size=536870912;

SET SESSION tmp_table_size=536870912;
参考:

更新2

我在diff-mysql和phpmyadmin版本中尝试了相同的数据库,它成功了。看来我的mysql版本有一个bug。我的mysql版本是5.6.26

试试这个:

select a1.id, 
a1.FirstName, 
a1.LastName,  
a1.mobile, 
a1.email
from user a1
inner join 
(
  select FirstName, LastName, count(id)
  from User
  where firstname is not null 
  and lastname is not null
  group by FirstName, LastName
  having count(id)>1
) u1
    on u1.FirstName = a1.Firstname
    and u1.Lastname = a1.lastname
order by a1.joineddate

您将pastebin设置为过期。请删除过期日期或将您的代码粘贴到问题中。@Fred ii-对不起,我是从google drive更新的。请再看一次问题,我认为发布一个完整的sql转储文件,其中包含名称+电子邮件,这不是一个好主意。您的mysql版本中,您的数据代码对我有效。可能是一个bug:
来自用户t
,在
t
周围有滴答声,对我唠叨不已。如果要将其用作别名,则需要删除其周围的记号,或者干脆删除
t
。我已经盯着它看了一段时间,不知为什么,它只是在攻击我,我不知道为什么@DEV1234这是我需要的查询<代码>选择FirstName不为null且LastName不为null的用户的FirstName、LastName、count(id)按FirstName分组,LastName的count(id)>1为我提供了正确的数据集。当我尝试使用is
获取手机号时,选择FirstName、LastName、mobile、count(id)
不会给我任何错误。但是,当我尝试使用o mobile no这样的方式获取电子邮件时,
从用户处选择FirstName、LastName、count(id),其中FirstName不为null,LastName不为null按FirstName分组,LastName的count(id)>1
它仍然会给我相同的错误