Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Valor padrão do MySQL como valor de outro campo


Vejo duas soluções possíveis para isso:

1. Possibilidade:

Você usa uma função para simplesmente ignorar sort_num se não estiver definido:
`SELECT * FROM mytable ORDER BY coalesce(sort_num, id)`

coalesce() retorna o primeiro valor não nulo, portanto você deve inserir valores para sort_num se você realmente precisar reordenar itens.

2. Possibilidade:

Você escreve um gatilho, que define automaticamente o valor se não estiver definido na instrução de inserção:
DELIMITER //

CREATE TRIGGER sort_num_trigger
BEFORE INSERT ON mytable
FOR EACH ROW BEGIN
    DECLARE auto_inc INT;
    IF (NEW.sort_num  is null) THEN
         -- determine next auto_increment value
        SELECT AUTO_INCREMENT INTO auto_inc FROM information_schema.TABLES
        WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME = 'mytable';
        -- and set the sort value to the same as the PK
        SET NEW.sort_num = auto_inc;
    END IF;
END
//

(inspirado por este comentário )

No entanto, isso pode ter problemas de paralelização (várias consultas inseridas ao mesmo tempo)