0

这是我的查询:

$query = "UPDATE ".$SupportTicketsTable." a
                    LEFT JOIN ".$SupportUserTable." b
                        ON b.id=a.operator_id
                    SET 
                        a.title=? , 
                        a.priority=?, 
                        b.solved_tickets= CASE WHEN (a.ticket_status='0' AND b.solved_tickets>=1) THEN (b.solved_tickets-1) ELSE b.solved_tickets END , 
                        b.assigned_tickets= CASE  WHEN (a.ticket_status='1' AND b.assigned_tickets >=1) THEN (b.assigned_tickets-1) ELSE b.assigned_tickets END ,
                        a.ticket_status=?, 
                        a.operator_id='0'
                    WHERE a.enc_id=?";

我可以更改里面的所有字段a,但不能更改表格中的字段b,我不明白为什么。我还检查了b.id等于a.operator_id
这些是我的表:

CREATE TABLE IF NOT EXISTS `razorphyn_support_list_tickets` (
`id`                BIGINT(15)  UNSIGNED        NOT NULL    AUTO_INCREMENT,
`enc_id`            CHAR(87),
`ref_id`            VARCHAR(18),
`department_id`     BIGINT(11)  UNSIGNED        NOT NULL,
`operator_id`       BIGINT(11)  UNSIGNED        NOT NULL DEFAULT 0,
`user_id`           BIGINT(11)  UNSIGNED        NOT NULL,
`title`             VARCHAR(255)                NOT NULL,
`priority`          INT(2)      UNSIGNED        NOT NULL,
`website`           VARCHAR(200)                NOT NULL,
`contype`           ENUM('0','1','2','3','4','5')   NOT NULL    DEFAULT '0',
`ftp_user`          VARCHAR(60)                 NOT NULL,
`ftp_password`      VARCHAR(60)                 NOT NULL,
`created_time`      DATETIME                    NOT NULL,
`last_reply`        DATETIME                    NOT NULL,
`ticket_status`     ENUM('0','1','2','3')       NOT NULL    DEFAULT '2',
`operator_rate`     DECIMAL(4,2)                UNSIGNED,
PRIMARY KEY (`id`),
UNIQUE KEY (`user_id`,`title`),
INDEX (`enc_id`,`department_id`,`operator_id`,`user_id`,`ticket_status`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=20;

CREATE TABLE IF NOT EXISTS `razorphyn_support_users` (
`id`                BIGINT(15)      UNSIGNED        NOT NULL AUTO_INCREMENT,
`name`              VARCHAR(50)                     NOT NULL,
`mail`              VARCHAR(50)                     NOT NULL,
`password`          VARCHAR(200)                    NOT NULL,
`reg_key`           VARCHAR(260)                    ,
`tmp_password`      VARCHAR(87)                     ,
`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',
`mail_alert`        ENUM('no','yes')                NOT NULL    DEFAULT 'yes',
`assigned_tickets`  INT(5)          UNSIGNED        NOT NULL    DEFAULT 0,
`solved_tickets`    BIGINT(11)      UNSIGNED        NOT NULL    DEFAULT 0,
`number_rating`     BIGINT(6)       UNSIGNED        NOT NULL    DEFAULT 0,
`rating`            DECIMAL(4,2)    UNSIGNED        NOT NULL    DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY(`mail`),
INDEX (`name`,`mail`,`status`,`holiday`,`assigned_tickets`,`solved_tickets`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=55;

这些是用户行:

(55, 'Admin', mail', 'code', 'code', NULL, '127.0.0.1', '2', '0', 'yes', 0, 0, 1, 4.00),
(62, 'Mario', 'mail', 'code', 'code', NULL, '87.8.28.216', '1', '0', 'yes', 2, 0, 0, 0.00);

这是票行:

(60, 'enc_id', 'wwZs1amB', 9, 62, 55, 'Bell', 1, '', '0', '', '', '2013-08-10 12:30:48', '2013-08-10 12:30:48', '1', NULL);
4

1 回答 1

0

update问题是 MySQL 不会在一个语句中多次更新单行。因此,您并没有像您认为查询应该那样“累积”更新。

此外,在一种情况下,in 的B值为 NULL,因此事物将被更新。

以下是两种替代方法:

  • 在两个单独的语句中进行更新
  • 使用触发器使值与b保持一致a
于 2013-08-10T17:20:36.267 回答