Vorweg: Nein, kein Schreibfehler, nicht EVA, sondern EAV für Entity-Attribut-Value-Modell. Hier zu lesen bei Wikipedia (engl.).
Im Thema 50 Datensätze gleichzeitig speichern wurde der Umgang damit auf die Verwendung des JSON-Format reduziert, hier zwei Alternativen zur Gestaltung von Abfragen:
Datenbank:
Möglichkeit 1 für DBMS, die Pivot-Funktion haben:
Möglichkeit 2 für DBMS, die die nicht haben (z.B. MySQL):
Im Thema 50 Datensätze gleichzeitig speichern wurde der Umgang damit auf die Verwendung des JSON-Format reduziert, hier zwei Alternativen zur Gestaltung von Abfragen:
Datenbank:
Code:
CREATE TABLE IF NOT EXISTS `tbl_adresse_eav` ( `AdresseEAV_ID` int(11) NOT NULL, `AdresseID_FK` int(11) NOT NULL, `AttributName` text NOT NULL, `Wert` text NOT NULL ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8; INSERT INTO `tbl_adresse_eav` (`AdresseEAV_ID`, `AdresseID_FK`, `AttributName`, `Wert`) VALUES (1, 1, 'Nachname', 'Müller'), (2, 1, 'Vorname', 'Heinz'), (3, 1, 'Ort', 'Hamburg'), (4, 2, 'Nachname', 'Meier'), (5, 2, 'Vorname', 'Hans'), (6, 2, 'Ort', 'Bremen'); ALTER TABLE `tbl_adresse_eav` ADD PRIMARY KEY (`AdresseEAV_ID`); ALTER TABLE `tbl_adresse_eav` MODIFY `AdresseEAV_ID` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=7;
Code:
TRANSFORM First(tbl_adresse_eav.Wert) AS ErsterWertvonWert SELECT tbl_adresse_eav.AdresseID_FK FROM tbl_adresse_eav GROUP BY tbl_adresse_eav.AdresseID_FK PIVOT tbl_adresse_eav.AttributName;
Code:
SELECT tbl_adresse_eav.AdresseID_FK, Max(If(AttributName='Nachname', Wert, '')) AS Nachname, Max(If(AttributName='Vorname', Wert, '')) AS Vorname, Max(If(AttributName='Ort', Wert, '')) AS Ort FROM tbl_adresse_eav GROUP BY tbl_adresse_eav.AdresseID_FK;
Kommentar