sql >> Database >  >> RDS >> Mysql

MySQL-standaardwaarde als de waarde van een ander veld

Ik zie hiervoor twee mogelijke oplossingen:

1. Mogelijkheid:

Je gebruikt een functie om gewoon sort_num . te negeren als het niet is ingesteld:

`SELECT * FROM mytable ORDER BY coalesce(sort_num, id)`

coalesce() retourneert de eerste niet-null-waarde, daarom zou u waarden invoegen voor sort_num als u echt artikelen opnieuw moet bestellen.

2. Mogelijkheid:

U schrijft een trigger, die automatisch de waarde instelt als deze niet is ingesteld in de insert-instructie:

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
//

(geïnspireerd door deze opmerking )

Dit kan echter leiden tot parallellisatieproblemen (meerdere query's die tegelijkertijd worden ingevoegd)



  1. Ik heb het SQL Server ODBC-stuurprogramma geüpgraded en de prestaties zijn negatief beïnvloed. Wat kan ik doen?

  2. Hoe u het aantal dagen in een maand in MySQL kunt krijgen

  3. Oracle-tabel exporteren naar Excel-werkblad

  4. Controleren op een leeg resultaat (PHP, PDO en MySQL)