ursus contionabundo: Mehrere Werte in einem Feld speichern? - Datentype "SET"

Beitrag lesen

Es gibt als Datentype das "SET".

CREATE TABLE `filter` (
    `userID` INT,
    `filter` SET('PauseBeginn', 'PauseEnde' ,'Kommen', 'Gehen' ),
    INDEX (`userID`)
)

Danach kann in die Tabelle wie folgt eingetragen werden:

INSERT INTO `filter` ( `userID` , `filter` ) VALUES ( 1, 'PauseBeginn' );
SELECT `filter` FROM `filter` WHERE `userID` = 1;

userID|filter 1|PauseBeginn

Filter hinzufügen:

UPDATE `filter` SET `filter` = CONCAT(`filter` , ',', 'PauseEnde') WHERE `userID`=1;
SELECT `userID`, `filter` FROM `filter` WHERE `userID` = 1;

userID|filter 1|PauseBeginn, PauseEnde

Index setzen und nach Filter abfragen:

ALTER TABLE `filter` ADD INDEX `filter` ( `filter` )
SELECT `userID`, `filter` FROM `filter` WHERE FIND_IN_SET( 'PauseEnde',`filter` );

userID|filter 1|PauseBeginn, PauseEnde

Entfernung eines Filters:

UPDATE `filter` SET `filter` = REPLACE( `filter` , 'PauseBeginn', '' )

userID|filter 1|PauseEnde

Versuch eines bei der Spaltendefinition nicht definierten Eintrages:

UPDATE `filter` SET `filter` = 'Nicht Definiert' WHERE `userID`=1;
SELECT `userID`, `filter` FROM `filter` WHERE `userID` = 1;

userID|filter 1|