2010-01-04 60 views
0

我想從我的MySQL表中取出所有記錄並檢查是否有重複項。我有想將它們全部存儲在一個數組中,然後檢查數組是否有重複。問題是,我的MySQL表中有大約150萬行。PHP檢查重複數組中的條目

這是我到目前爲止的代碼:

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

最好的辦法是在SQL查詢中處理它,而不是PHP。這樣,您只能在數據庫上處理一次用戶名,而不是在數據庫上處理一次,而在PHP中處理一次。 – 2010-01-04 22:33:26

回答

0
$q = "SELECT count(*),usrname FROM `users` group by usrname having count(*)>1"; 
0

幾點意見:

之一,你可以使用DISTINCT關鍵字在你的SQL返回原件只(不愚弄)

兩個,你爲什麼在插入重複的分貝第一個地方?你可能想解決這個問題。

三,你可以選擇所有行(不是一個好主意),只是把它們粘在數組中像你這樣做,只是讓這種變化:

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

在邏輯沒有受騙者! heh

+0

謝謝,我實際上正在修理一個朋友網站,並且他的用戶由他們的ID分隔,並且他們可以擁有相同的用戶名。因此我試圖修復。 – Matt 2010-01-04 22:22:51

+0

很酷,祝你好運馬特! – 2010-01-05 02:03:29

0

您可以使用mysql函數group by查明,電子郵件存在兩次或多次。儘管如此,這是非常沉重的負載在MySQL服務器上。

SELECT usrname, count(*) 
FROM `users` 
GROUP BY `email` 
HAVING count(*) > 1; 
1

你可以像

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

做到在MYSQL顯然全部返回usrname的有重複

1

$ Q = 「SELECT DISTINCT usrname FROM users」;

使用此查詢,您將獲得所有唯一的用戶名。

1

也許你可以嘗試使用一個SQL查詢:

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

,應返回存在一次以上的所有用戶。

0

array_unique()將僅返回唯一的數組值。誠實地說,我不會把這個任務委託給PHP,我會在查詢數據庫的時候處理它。