2013-04-08 105 views
0

我想知道註冊用戶的ip是否存在於最近的30條記錄中。這將幫助我防止多次註冊。我在嘗試在mysql中執行此操作時遇到困難。這是我在哪裏至今:mysql - 找出最近30條記錄中是否存在輸入

跨所有記錄檢查多個IP的舊查詢:

$same_ip_count = mysql_num_rows(mysql_query("SELECT * FROM login_users WHERE ip='".$ip."'")); 

新的代碼失敗:新

$same_ip_count = mysql_num_rows(mysql_query(
"SELECT 'user_id' 
FROM (
    SELECT * 
    FROM login_users 
    ORDER BY user_id DESC 
    LIMIT 30 
) AS t 
WHERE t.ip = '".$ip."'")); 

類到SQL所以在這一點上任何建議都會很棒。

編輯:

要清楚 - 我只想搜索最後30條記錄。我不想搜索所有記錄,然後將其限制爲30.

+0

你會得到哪個錯誤? – 2013-04-08 14:39:04

+1

'SELECT * FROM login_users WHERE ip ='$ ip'ORDER BY user_id DESC LIMIT 30' will not work? – kero 2013-04-08 14:39:23

+0

讓我猜...'SELECT'user_id''打印'user_id'幾次,不是嗎? – 2013-04-08 14:39:24

回答

1

首先使用子查詢獲取最後30個項目。然後,您可以從IP匹配的那個列表中選擇30。

Select * From 
(SELECT * 
     FROM login_users 
     ORDER BY registration_date DESC 
     LIMIT 30) a 
WHERE a.ip = '".$ip."' 
+0

謝謝編輯。我錯誤地複製了他的問題:) – 2013-04-08 14:40:23

+0

我只想從最後30條記錄中搜索。我不想搜索所有記錄,然後將它們限制爲30. – Tom 2013-04-08 14:42:34

+1

通過registration_date的順序更新查詢,因爲user_id的順序沒有任何意義。 – 2013-04-08 14:42:36

0

Mysql不知道最後30條記錄是什麼。如果您使用自動遞增主鍵,那麼您可以按照後代順序通過該鍵進行排序。

+0

Just chk this- http://dev.mysql.com/doc/refman/5.0/en/select.html – 2013-04-08 14:45:37

+0

按註冊日期排序規定php部分是正確的,while通過自動遞增主鍵排序不能有偏差。你應該閱讀鏈接是。 – epicdev 2013-04-08 14:59:35

0

試試這個。

$query = mysql_query(
"SELECT 'user_id' as result from `login_users` WHERE ip = '".$ip."' ORDER BY user_id DESC LIMIT 30"); 

$same_ip = mysql_num_rows($query); 
相關問題