我有我們網站的登錄日誌列表,但是我需要查看哪個用戶標識擁有最多的IP登錄到其中。我們的表如下:MySQL從用戶標識中選擇最常用的IP
用戶ID,IP,日期(UNIX)
我需要它輸出的用戶ID的已經最IP的登錄到他們其中。
我試過的東西,如:
SELECT
userID
FROM loginLogs
GROUP BY userID
HAVING COUNT(DISTINCT ip) > 1
但是,這只是顯示的用戶ID的列表。
我有我們網站的登錄日誌列表,但是我需要查看哪個用戶標識擁有最多的IP登錄到其中。我們的表如下:MySQL從用戶標識中選擇最常用的IP
用戶ID,IP,日期(UNIX)
我需要它輸出的用戶ID的已經最IP的登錄到他們其中。
我試過的東西,如:
SELECT
userID
FROM loginLogs
GROUP BY userID
HAVING COUNT(DISTINCT ip) > 1
但是,這只是顯示的用戶ID的列表。
您有權責令這些結果order by COUNT(DISTINCT ip ) desc
並採取第一Limit 0, 1
SELECT `userID`
FROM `loginLogs`
GROUP BY `userID`
ORDER BY COUNT(DISTINCT `ip`) desc
LIMIT 0, 1
也許這樣嗎?
SELECT `userID`, count(`ip`) cnt FROM `loginLogs` GROUP BY `userID` HAVING cnt > 1
這可以工作,但它顯示登錄的總數,而不是唯一的IP登錄。 – user1372896
SELECT userID, COUNT(*) AS count FROM loginLogs
GROUP BY userId ORDER BY count DESC
這會給你所有用戶的大多數登錄到最少。如果要限制結果,請使用LIMIT 1。
您可以將您在子查詢中包含的內容包裝成用戶標識和不同的IP列表。
SELECT DISTINCT ll.`userID`, ll.`ip`
FROM ( SELECT `userID`, COUNT(1) AS Cnt
FROM `loginLogs`
GROUP BY `userID`
HAVING COUNT(DISTINCT `ip`) > 1) id
LEFT JOIN `loginLogs` ll
ON id.`userID` = ll.`userID`
ORDER BY id.`Cnt`;
您可以通過不同的值進行排序,降序;
SELECT userID, COUNT(DISTINCT ip) `distinct IP#s`
FROM loginLogs
GROUP BY userID
ORDER BY `distinct IP#s` DESC;
這是最好的答案。 Asker在接受答案前應等待幾分鐘。 –
如果你只是想看看最IPS的用戶,你也希望看到IP列表,你可以使用GROUP_CONCAT()
:
SELECT `userID`, group_concat(DISTINCT `ip`)
FROM `loginLogs`
GROUP BY `userID`
ORDER BY COUNT(DISTINCT `ip`) DESC
LIMIT 1
你不要求有唯一的第一記錄的最用戶? – giammin