2013-04-08 64 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);