2
我有一個表用於存儲對radius服務器的所有訪問請求,如下所示:MySQL從列a中爲每個不同的列b選擇所有不同的值,其中計數不同a> 1
describe radius.loginattempts;
+------------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+------------------+------+-----+---------+----------------+
| loginattempt_key | int(10) unsigned | NO | PRI | NULL | auto_increment |
| log_date | int(10) unsigned | NO | | NULL | |
| result | tinyint(1) | YES | | NULL | |
| username | text | YES | | NULL | |
| mac | text | YES | | NULL | |
+------------------+------------------+------+-----+---------+----------------+
每次有人嘗試登錄時,無論是否有效,都會在此表中創建日誌條目。
我想要做的是獲取所有有兩個或更多用戶嘗試登錄的設備的列表,以及每個設備的所有不同用戶名。
所以,如果我有一些數據,看起來像這樣:
select * from loginattempts limit 8;
+------------------+------------+--------+----------+-------------------+
| loginattempt_key | log_date | result | username | mac |
+------------------+------------+--------+----------+-------------------+
| 1 | 1337035334 | 1 | kclark | 11:11:11:11:11:11 |
| 2 | 1337035620 | 1 | kclark | 22:22:22:22:22:22 |
| 3 | 1337035681 | 0 | guest | 33:33:33:33:33:33 |
| 4 | 1337035740 | 1 | guest | 22:22:22:22:22:22 |
| 5 | 1337037782 | 1 | rfogarty | 44:44:44:44:44:44 |
| 6 | 1337037789 | 1 | jsmith | 44:44:44:44:44:44 |
| 7 | 1337037790 | 1 | jsmith | 44:44:44:44:44:44 |
| 8 | 1337037791 | 1 | jsmith | 44:44:44:44:44:44 |
+------------------+------------+--------+----------+-------------------+
我想一個神奇的查詢,返回是這樣的:
+-------------------+----------+
| mac | username |
+-------------------+----------+
| 22:22:22:22:22:22 | kclark |
| 22:22:22:22:22:22 | guest |
| 44:44:44:44:44:44 | rfogarty |
| 44:44:44:44:44:44 | jsmith |
+-------------------+----------+
這最終會在PHP中,和我可以通過兩個查詢和一個for循環輕鬆完成,但作爲一個思考實驗,我一直在想如何用單個查詢和一些奇特的連接(或者甚至是子查詢)來做到這一點,但無法包住我的頭在它周圍...
mysql -V
mysql Ver 14.14 Distrib 5.1.52, for unknown-linux-gnu (x86_64) using readline 5.1
YES!謝謝!我不得不作出一個小小的改變,將「有(*)> 1」改爲「有數(不同的用戶名)> 1」。 – JoeTomato
實際上,另一個變化是:必須在最後添加另一個組,以便每個用戶/ mac組合只有一行。所以,我的最終查詢結束了: 選擇MAC,用戶名 從loginattempts 其中 MAC在 ( 選擇MAC 從loginattempts 組由MAC 具有計數(不同的用戶名)> 1 ) 組由MAC,用戶名 order by mac asc ; 再次感謝! – JoeTomato