2012-01-10 68 views
1

我還沒有代碼,因爲我從未寫過這樣的查詢。我公司的電子商務網站提供首次購買20%的折扣。我們發現偷偷摸摸的人創建多個帳戶來利用。此時創建一​​個帳戶時,它只會檢查一個匹配的電子郵件。比較數據庫項目以查找重複項

老闆想要什麼時,只要他登錄到管理區域,查詢就會運行並顯示具有相同名字和姓氏的任何帳戶以及其他項目。唯一可以這樣做的方式是選擇所有用戶,並循環搜索所有匹配項。我認爲這可以通過一個查詢來完成。這裏是我想要的一個例子:

$res=$mysqli->query("SELECT * from users"); 
while($user = $res->fetch_array()){ 

    $res2=$mysqli->query("SELECT * FROM users WHERE firstname='".$user->firstname."' 
           OR lastname='".$user->lastname."' .... "); 
    while($user2 = $res2->fetch_array()){ 
     print $user->id . " matches " . $user2->id; 
    } 

} 

可以這樣使用一個查詢完成,如果是的話,請proive一個例子,或鏈接。我感謝所有幫助

+0

閱讀SQL中的「group by」。這應該可以幫助你。 – Danny 2012-01-10 15:58:19

+0

儘管有些練習寫出了實際的查詢,但是您可以使用&count()組獲得重複計數的列表,然後選擇您的上司希望兩個名字匹配的計數> 1 – MrGlass 2012-01-10 15:58:55

+0

姓氏,還是他想要名字或姓氏上的匹配?前者似乎對我最明智,但你的查詢中有'OR'! – 2012-01-10 16:02:49

回答

7

加入同一個表:

SELECT * FROM users u1 LEFT JOIN users u2 ON (u1.FirstName = u2.FirstName) 
    WHERE u1.Id != u2.Id; 
+0

並且可能也是姓氏? – 2012-01-10 16:00:27

+0

這是完美的,我想我可以在括號內放置儘可能多的ON子句項目?我不經常使用JOIN – 2012-01-10 16:01:29

0

像這樣的東西可能會給你的想法。

select field, GROUP_CONCAT(id SEPARATOR ',') from table group by field having count(field) > 2;