-1

我想检查几件事....但我不能...(检查下面)。

好的,所以这可以正常工作,但我想添加更多检查。

mysql_query('UPDATE characters SET voted=1 where account_name like \''.$row['login'].'\' and online=1;') ;

无论如何,我想添加的是在 online=1 之后检查在哪里 MIN(lastAccess)

我尝试了几件事,但我失败了......比如:

mysql_query('UPDATE characters SET voted=1 where account_name like \''.$row['login'].'\' and online=1 having min(lastaccess);') ;
4

1 回答 1

0

您甚至可以进一步加入表格以根据需要工作,

UPDATE  characters a
        INNER JOIN
        (
            SELECT  account_name, MIN(lastaccess) min_date
            FROM    characters
            GROUP   BY account_name
        ) b ON  a.Account_Name = b.Account_name AND
                a.lastAccess = b.min_date
SET     a.voted = 1
WHERE   a.Account_Name = 'nameHere' AND
        a.online = 1

更新 1

尝试使用double quotes,例如

$userName = $row['login'];
$result = mysql_query(" UPDATE  characters a
                                INNER JOIN
                                (
                                    SELECT  account_name, MIN(lastaccess) min_date
                                    FROM    characters
                                    GROUP   BY account_name
                                ) b ON  a.Account_Name = b.Account_name AND
                                        a.lastAccess = b.min_date
                        SET     a.voted = 1
                        WHERE   a.Account_Name = '$userName' AND
                                a.online = 1");

作为旁注,SQL Injection如果变量的值(s)来自外部,则查询很容易受到攻击。请看下面的文章,了解如何预防。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

于 2013-04-03T05:22:55.907 回答