PHP检查数组中的条目是否有重复项

时间:2010-01-04 22:17:27

标签: php mysql arrays

我想从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万个:|

感谢您的帮助。

7 个答案:

答案 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,我会在查询数据库时处理它。