我想从MySQL表中获取所有记录,并检查是否有重复记录。我有想法将它们全部存储在一个数组中,然后检查数组是否有重复。问题是,我的MySQL表中有大约150万行。
到目前为止,这是我的代码:
<?php
$con = mysql_connect('localhost', 'root', '');
$sel = mysql_select_db('usraccts', $con);
$users = array();
$q = "SELECT usrname FROM `users`";
$r = mysql_query($q, $con);
while($row = mysql_fetch_assoc($r))
{
$users[] = $row['usrname'];
}
print_r($emails);
?>
我不知道如何调整它以检查数组条目中的重复项,特别是其中有150万个:|
感谢您的帮助。
答案 0 :(得分:1)
你可以在MYSQL中使用
这样的东西SELECT usrname, COUNT(usrname) as duplicates FROM `users` WHERE duplicates > 1 GROUP BY usrname
显然,所有返回的usrname
都有重复
答案 1 :(得分:1)
$ q =“SELECT distinct usrname FROM
users
“;
使用此查询,您将获得所有唯一的用户名。
答案 2 :(得分:1)
也许您可以尝试SQL查询,如:
SELECT usrname,
COUNT(usrname) AS NumOccurrences
FROM users
GROUP BY usrname
HAVING ( COUNT(usrname) > 1 )
这应该返回多次存在的所有用户。
答案 3 :(得分:0)
$q = "SELECT count(*),usrname FROM `users` group by usrname having count(*)>1";
答案 4 :(得分:0)
一些评论:
一,您是否可以在SQL中使用DISTINCT关键字仅返回原件(无欺骗)
二,为什么你首先在数据库中插入重复项?你可能想解决这个问题。
三,您可以选择所有行(不是一个好主意),只需将它们粘贴在数组中,就像执行此更改一样:
$users[$row['username']] = $row['username'];
在那个逻辑中没有欺骗! HEH
答案 5 :(得分:0)
您可以使用group by
mysql函数查找,电子邮件存在两次或更多次。这虽然是mysql服务器上非常重的负载。
SELECT usrname, count(*)
FROM `users`
GROUP BY `email`
HAVING count(*) > 1;
答案 6 :(得分:0)
array_unique()将仅返回唯一的数组值。老实说,我不会将此任务委托给PHP,我会在查询数据库时处理它。