2013-06-06 7 views
0

Я пытаюсь понять, что написано в вопросе, возможно, это глупый вопрос, но я не могу найти решение, в основном это то, что я хотел бы сделать:Обновление разных столбцов в разных таблицах на основе значения столбца

if(a.operator_id!=0){ 
    UPDATE ".$SupportTicketsTable." a ,".$SupportUserTable." b 
    SET a.title=? , a.priority=?, a.ticket_status=?, 
    b.solved_tickets= CASE 
     WHEN a.ticket_status!='0' THEN (b.solved_tickets+1) 
     ELSE b.solved_tickets END , 
    b.assigned_tickets= CASE 
     WHEN a.ticket_status!='0' THEN (b.assigned_tickets-1) 
     ELSE b.assigned_tickets END ,a.ticket_status='0' 
    WHERE a.enc_id=? AND b.id=a.operator_id 
} 
else{ 
    UPDATE ".$SupportTicketsTable." a ,".$SupportUserTable." b 
    SET a.title=? , a.priority=?, a.ticket_status=? 
     ELSE b.assigned_tickets END ,a.ticket_status='0' 
    WHERE a.enc_id=? 
} 

Когда a.operator_id=0 не существует значение для b.id, который будет соответствовать условию есть ли способ сделать это только в одном запросе? Заранее спасибо

ответ

1
  1. Я думаю, что ваша ветвь ELSE неправильно:

    ... 
    else{ 
    UPDATE ".$SupportTicketsTable." a ,".$SupportUserTable." b 
    SET a.title=? , a.priority=?, a.ticket_status=? 
        ELSE b.assigned_tickets END ,a.ticket_status='0' 
    WHERE a.enc_id=? 
    } 
    
  2. Вы можете создать один или два srored процедуры с dynamicSQL внутри и положить tablenames в качестве параметра в там. например:

    DELIMITER $$ 
    DROP PROCEDURE IF EXISTS my_proc $$ 
    CREATE PROCEDURE my_proc (IN SupportTicketsTable VARCHAR(20), IN SupportUserTable VARCHAR(20)) 
    BEGIN 
    SET @SQLS = CONCAT('UPDATE ',SupportTicketsTable, 'a ', SupportUserTable,' b 
        SET a.title=? , a.priority=?, a.ticket_status=?, 
        b.solved_tickets= CASE 
         WHEN a.ticket_status!='0' THEN (b.solved_tickets+1) 
         ELSE b.solved_tickets END , 
        b.assigned_tickets= CASE 
         WHEN a.ticket_status!='0' THEN (b.assigned_tickets-1) 
         ELSE b.assigned_tickets END , 
        a.ticket_status='0' 
        WHERE a.enc_id=? AND b.id=a.operator_id'; 
    
    PREPARE STMT FROM @SQLS; 
    EXECUTE STMT; 
    DEALLOCATE PREPARE STMT; 
    
    END$$ 
    
+0

Спасибо за ответ, но я думаю, что я решил его просто путем изменения из И в OR – Razorphyn

Смежные вопросы