0

今天我的脚本有一些问题,我无法准备查询并且脚本不会重新运行任何错误:

表结构(哎呀,错误的表,已更正):

CREATE TABLE IF NOT EXISTS `razorphyn_support_users` (
`id`                BIGINT(11)    UNSIGNED    NOT NULL AUTO_INCREMENT,
`name`              VARCHAR(50)               NOT NULL,
`mail`              VARCHAR(50)               NOT NULL,
`password`          VARCHAR(200)              NOT NULL,
`reg_key`           VARCHAR(260)              NOT NULL,
`tmp_password`      VARCHAR(31)               NULL,
`ip_address`        VARCHAR(50)               NOT NULL,
`status`            ENUM('0','1','2','3','4') NOT NULL    DEFAULT '3',
`holiday`           ENUM('0','1')             NOT NULL    DEFAULT '0',
`assigned_tickets`  INT(5)        UNSIGNED    NOT NULL    DEFAULT 0,
`solved_tickets`    BIGINT(11)    UNSIGNED    NOT NULL    DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY(`mail`)) 
ENGINE=MyISAM
DEFAULT CHARSET=utf8 
AUTO_INCREMENT=55;

无法准备的字符串:

$query = "SELECT `id` FROM ".$SupportUserTable." 
WHERE `status`='2' AND `holiday`='0' AND MIN(`assigned_tickets`) 
ORDER BY `solved_tickets` ASC" ;

完整的代码(实际上这只是其中的一部分,$stmt已经开始工作了,基本上它已经连接了):

file_put_contents('ok.txt','');
$query = "SELECT `id`  FROM ".$SupportUserTable." 
          WHERE `status`='2' AND `holiday`='0' AND MIN(`assigned_tickets`) 
          ORDER BY `solved_tickets` ASC" ;
$prepared = $stmt->prepare($query);
if($prepared){
file_put_contents('ok2.txt','');
if($stmt->execute()){
    file_put_contents('ok3.txt','');
    $stmt->store_result();
    $result = $stmt->bind_result($id);
    file_put_contents('eafv.txt','id: '.$id);
    if($stmt->num_rows>0){
        $query = "UPDATE ".$SupportTicketsTable." SET operator_id=? 
                  WHERE id=? ";
        if($prepared = $stmt->prepare($query)){
            if($stmt->bind_param('ii', $id,$tkid)){
                if($stmt->execute()){
                    echo json_encode(array(0=>'Created'));
                }
                else
                    echo json_encode(array(0=>mysqli_stmt_error($stmt)));
            }
            else
                echo json_encode(array(0=>mysqli_stmt_error($stmt)));
        }
        else
            echo json_encode(array(0=>mysqli_stmt_error($stmt)));
    }
    else
        echo json_encode(array(0=>'No Operator Available'));
}
else
    echo json_encode(array(0=>mysqli_stmt_error($stmt)));
}
else
    echo json_encode(array(0=>$stmt->error));
4

1 回答 1

2

您不能将 MIN() 表达式放在 SQL 的 WHERE 子句中。您只能将 MIN() 表达式放在选择列表、HAVING 子句和 ORDER BY 子句中。

你想要的是:

我想选择开票数量最少的运营商,如果有多个运营商具有相同的价值[然后]选择解决票较少的运营商

这是获得此结果的解决方案:

SELECT `id` FROM razorphyn_support_users 
WHERE `status` = 2 AND `holiday` = 0 
ORDER BY `assigned_tickets` ASC, `solved_tickets` ASC
LIMIT 1

回复您的评论:

有关 LIMIT 语法,请参阅https://stackoverflow.com/a/3325580/20860或 MySQL 手册,其中说:

为了与 PostgreSQL 兼容,MySQL 还支持 LIMIT row_count OFFSET 偏移量语法。

如果类型是字符串或枚举,则使用字符串分隔符很好。我假设列是整数(我没有仔细检查上面的表定义),并删除了字符串分隔符,因为它们对于整数不是必需的。

于 2013-05-14T22:46:19.733 回答