Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何更正此mysql_查询,使用正确的语法并使其正常工作?_Mysql_Sql_Syntax_Where_Min - Fatal编程技术网

如何更正此mysql_查询,使用正确的语法并使其正常工作?

如何更正此mysql_查询,使用正确的语法并使其正常工作?,mysql,sql,syntax,where,min,Mysql,Sql,Syntax,Where,Min,我已经就此提出了一个问题。但由于我没有得到对我有很大帮助的答案,我想再问一次 In Database [1] Table Characters +----+------------------+-------+---------+ |account_name| lastaccess| online| voted | +------------+-----------+-------+--------+ | Account1 | 1231321231| 1 |

我已经就此提出了一个问题。但由于我没有得到对我有很大帮助的答案,我想再问一次

    In Database [1]
    Table Characters
+----+------------------+-------+---------+
|account_name| lastaccess| online| voted  |
+------------+-----------+-------+--------+
| Account1   | 1231321231|   1   |    1   |
| Account1   | 132312213 |   0   |    0   |
| Account3   | 13231212  |   0   |    0   |
+------------+-----------+-------+--------+
    In Database [2]
    Table Accounts
+----+------------------+
|   Login   | lastIp    | 
+-----------+-----------+
| Account1  | 0.0.0.0.0 |
| Account1  | 0.0.0.0.0 |
| Account3  | 0.0.0.0.0 |
+-----------+-----------+
我已经有了一个函数,可以获取lastIP帐户的位置

function getclientip()
    {
        if ( isset($_SERVER["REMOTE_ADDR"]) )    { 
            return $_SERVER["REMOTE_ADDR"]; 
        } else if ( isset($_SERVER["HTTP_X_FORWARDED_FOR"]) )    { 
            return $_SERVER["HTTP_X_FORWARDED_FOR"] ; 
        } else if ( isset($_SERVER["HTTP_CLIENT_IP"]) )    { 
            return $_SERVER["HTTP_CLIENT_IP"] ; 
        }
            return "0.0.0.0";
    }
$Ip=getclientip();
$sql='SELECT login FROM accounts WHERE lastIp like \''.$Ip.'\';';
echo mysql_error();
$result = mysql_query($sql);
if (false === $result) {
}
while($row = mysql_fetch_array($result))
{
我想做的是:

mysql_query('update characters SET voted=1 where account_name like \''.$row['login'].'\' and online=1;') ;
但其中
MIN(lastaccess)
仅限。
我希望你能理解我的意思,否则请你问我,我会更好地解释。

我会尽力为你解释我的答案,以便更好地理解和消除容易混淆的部分:

我保留了你代码的这一部分:

function getclientip()
    {
        if ( isset($_SERVER["REMOTE_ADDR"]) )    { 
            return $_SERVER["REMOTE_ADDR"]; 
        } else if ( isset($_SERVER["HTTP_X_FORWARDED_FOR"]) )    { 
            return $_SERVER["HTTP_X_FORWARDED_FOR"] ; 
        } else if ( isset($_SERVER["HTTP_CLIENT_IP"]) )    { 
            return $_SERVER["HTTP_CLIENT_IP"] ; 
        }
            return "0.0.0.0";
    }
$Ip=getclientip();
现在,您可以将这一行sql与更新代码行连接起来: 这条线很长

$sql='SELECT login FROM accounts WHERE lastIp like \''.$Ip.'\';';
这一行:

mysql_query('update characters SET voted=1 where account_name like \''.$row['login'].'\' and online=1;') ;
你在问题中写道,现在加入这些部分的结果是:

$sql='UPDATE characters SET voted=1 where online=1 AND account_name IN (SELECT login FROM accounts WHERE lastIp like \''.$Ip.'\');';
现在,您只想在MIN(lastaccess)处更新,然后可以使用此查询,因为我按lastaccess对升序行进行排序,其平均值从lastaccess列的较低位置到较高位置,然后选择此行的顶部,换句话说,我选择具有最小lastaccess的行,然后将其传递给set voted=1的update命令:

UPDATE characters SET voted=1 where online=1 AND account_name IN
(SELECT login FROM accounts WHERE lastIp like \''.$Ip.'\' ORDER BY lastaccess ASC LIMIT 1);
您可以使用临时表和MIN函数:

UPDATE characters SET voted=1 where online=1 AND account_name IN
(SELECT tempTable.login FROM (SELECT login, MIN(lastaccess) FROM accounts WHERE lastIp like \''.$Ip.'\' GROUP BY login) tempTable;
不要忘记,您的结果没有任何行,因为它的update命令

mysql_query('UPDATE characters SET voted=1 where online=1 AND account_name IN
    (SELECT login FROM accounts WHERE lastIp like \''.$Ip.'\' ORDER BY lastaccess ASC LIMIT 1);');


我希望,这是您所需要的。

很好,我将跳过您的功能,因为远程地址总是可用的

$Ip = $_SERVER['REMOTE_ADDR'];
$sql= mysqli_query( $database, "SELECT login FROM accounts WHERE lastIp = '$ip' ");

while($row = mysqli_fetch_assoc($sql)) {
    if(mysqli_query("UPDATE characters SET voted = '1' WHERE account_name = "'.$row['login'].'" AND online = '1'")) {
       print 'updated succesfully';
    } else {
        print 'update did not complete';
    }
}

我不会评论你的行为,我只想说这是你从我这里得到的唯一答案。

如果你已经问了这个问题,我建议提供一个链接。注意*回答正确的人,但我太困了,没有注意到他的问题。不管怎样,我实际上没有足够的技术来解决这个问题。这就是为什么我要再问。链接:@JW已经给了你一个有效的答案,包括在PHP中嵌入SQL的版本。请尝试该答案并报告错误。假设错误是您在下面提供的错误,则执行更新查询然后获取结果是没有意义的。我怀疑你对问题的表述有误。用更新替换SELECT命令是没有意义的。我很困惑,你们把我弄糊涂了。。。这对所有人都没有帮助!我想做的就是
mysql\u查询('updatecharacters SET-voted=1,其中帐户名像\''.$row['login'.\'和online=1;')
但其中只有MIN(lastaccess),仅此而已…
mysql\u查询('update characters SET voted=1,其中帐户名类似\''.$row['login'.\'和online=1;')
;但此处仅显示MIN(lastaccess)。两个表都在不同的数据库中。所以没有。这行不通。总之,我想让
vote=1
只包含这个登录中的一个字符,而不是所有字符。所以我尝试使用MIN(lastaccess)作为一个点,仅在MIN(lastaccess)有其他IDIA的地方更新character vote=1:D@JW代码我得到的错误是
警告:mysql\u fetch\u array()希望参数1是resource,第50行的D:\xampp\htdocs\vote\vote.php中给出的布尔值,第50行是
,而($row=mysql\u fetch\u array($result))
`
lastAccess
bigint(13)未签名的非空默认值“0”,我很困惑,你们困惑我。。。这对所有人都没有帮助!我想做的就是
mysql\u查询('updatecharacters SET-voted=1,其中帐户名像\''.$row['login'.\'和online=1;')但其中仅限MIN(lastaccess),仅此而已。。。
$Ip = $_SERVER['REMOTE_ADDR'];
$sql= mysqli_query( $database, "SELECT login FROM accounts WHERE lastIp = '$ip' ");

while($row = mysqli_fetch_assoc($sql)) {
    if(mysqli_query("UPDATE characters SET voted = '1' WHERE account_name = "'.$row['login'].'" AND online = '1'")) {
       print 'updated succesfully';
    } else {
        print 'update did not complete';
    }
}