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
它仍然会给我相同的错误