PHP проверяет записи в массиве на дубликаты - PullRequest
0 голосов
/ 05 января 2010

Я хочу взять все записи из моей таблицы MySQL и проверить, есть ли дубликаты.У меня была идея сохранить их все в массиве, а затем проверить массив на наличие дубликатов.Проблема в том, что у меня около 1,5 миллионов строк в моей таблице MySQL.

Пока это мой код:

<?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);

?>

Я не уверен, как я могу адаптировать это для проверкидубликаты в записях массива, особенно с 1,5 миллионами из них: |

Спасибо за любую помощь.

Ответы [ 7 ]

1 голос
/ 05 января 2010

Может быть, вы можете попробовать запрос SQL, например:

SELECT usrname, 
COUNT(usrname) AS NumOccurrences
FROM users
GROUP BY usrname
HAVING ( COUNT(usrname) > 1 )

это должно вернуть всех пользователей, которые существуют более одного раза.

1 голос
/ 05 января 2010

$ q = "ВЫБЕРИТЕ отличное имя пользователя ОТ users ";

С помощью этого запроса вы получаете все уникальные имена пользователей.

1 голос
/ 05 января 2010

Вы можете сделать это в MYSQL с чем-то вроде

SELECT usrname, COUNT(usrname) as duplicates FROM `users` WHERE duplicates > 1 GROUP BY usrname

Очевидно, что все возвращенные usrname имеют дубликаты

0 голосов
/ 05 января 2010

array_unique () вернет только уникальные значения массива. Честно говоря, я бы не делегировал эту задачу PHP, я бы обработал ее во время запроса к базе данных.

0 голосов
/ 05 января 2010

Вы можете использовать функцию group by mysql, чтобы узнать, существуют ли электронные письма дважды или более. Это очень большая нагрузка на сервер MySQL, хотя.

SELECT usrname, count(*)
FROM `users`
GROUP BY `email`
HAVING count(*) > 1;
0 голосов
/ 05 января 2010

Несколько комментариев:

Во-первых, вы можете использовать ключевое слово DISTINCT в своем SQL для возврата только оригиналов (без дублирования)

Во-вторых, почему вы сначала вставляете дубликаты в БД? Возможно, вы захотите это исправить.

Три, вы можете выбрать все строки (не очень хорошая идея) и просто вставить их в массив, как вы делаете, за исключением внесения этого изменения:

$users[$row['username']] = $row['username'];

Никаких дураков в этой логике! хех

0 голосов
/ 05 января 2010
$q = "SELECT count(*),usrname FROM `users` group by usrname having count(*)>1";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...