2011-04-04 29 views
1

我正在運行一個交友網站,我想知道哪些用戶擁有多個配置文件。mysql - 查找從同一個ip登錄的用戶

我有一個用戶日誌表(用戶標識,IP地址),我想找到所有用戶從同一個IP地址登錄 - 我只想要結果超過1個用戶從相同的IP登錄。

在此先感謝。

+1

如果兩個人一起使用該網站會怎樣? – 2011-04-04 20:32:29

+5

或者如果他們使用移動互聯網(在這種情況下,成千上萬的智能手機用戶可能會共享一個IP)?不要僅僅假設IP。 – Wrikken 2011-04-04 20:39:40

+3

一個典型的_我知道它是壞的,請不要讓我修復它_?因此,我收集關於您可以做什麼不受歡迎的建議?好的,不管它是壞的,這是你的網站,你決定:) – Wrikken 2011-04-04 21:13:56

回答

2

這聽起來像一個簡單的GROUP BYHAVING所以我會認爲這是你想要什麼:

SELECT "ip address" 
FROM userlog 
GROUP BY "ip address" 
HAVING COUNT(*) > 1 

這會給你的用戶的所有IP地址。要獲得實際的用戶:

SELECT "ip address", userid 
FROM userlog 
WHERE "ip address" IN (
    SELECT "ip address" 
    FROM userlog 
    GROUP BY "ip address" 
    HAVING COUNT(*) > 1 
) 
ORDER BY "ip address" 
+0

你好,如果同一個用戶使用相同的IP登錄10次會怎麼樣?這將作爲重複在第一個查詢中返回。 – 2011-04-04 21:07:39

+0

@Sherif Buzz不知道這是否適用於MySQL,但具有COUNT(DISTINCT userid)> 1'可能會給你你想要的... – 2011-04-04 21:44:24

+0

@djacobson:這將工作,但不會很好地擴展(不在MySQL 5.0中無論如何) – Piskvor 2011-04-05 07:22:29

0

您的查詢會是這個樣子......

$ip = $_SERVER['REMOTE_ADDR']; 
$email = mysql_real_escape_string($_POST[email]); 
$password = mysql_real_escape_string($_POST[password]); 

$qry = "SELECT * FROM accounts WHERE email = '$email' && password = '$password' && ip = '$ip'"; 
$result = mysql_query($qry); 
if(mysql_num_rows($result) == 1) { 
//What you want to do if it matches with an already logged ip 
} 

好運。