如何更正此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';
}
}