sql >> Databáze >  >> RDS >> Mysql

Jak pivotovat schéma entity-atributu-hodnoty MySQL

Otázka zmiňuje MySQL a ve skutečnosti má tento DBMS speciální funkci pro tento druh problému:GROUP_CONCAT(expr) . Podívejte se do reference MySQL manuál o funkcích po skupinách . Funkce byla přidána do MySQL verze 4.1. Budete používat GROUP BY FileID v dotazu.

Nejsem si jistý, jak chcete, aby výsledek vypadal. Pokud chcete, aby byly u každé položky uvedeny všechny atributy (i když nebyly nastaveny), bude to těžší. Nicméně toto je můj návrh, jak to udělat:

SELECT bt.FileID, Title, Author, 
 GROUP_CONCAT(
  CONCAT_WS(':', at.AttributeName, at.AttributeType, avt.AttributeValue) 
  ORDER BY at.AttributeName SEPARATOR ', ') 
FROM BaseTable bt JOIN AttributeValueTable avt ON avt.FileID=bt.FileID 
 JOIN AttributeTable at ON avt.AttributeId=at.AttributeId 
GROUP BY bt.FileID;

Tím získáte všechny atributy ve stejném pořadí, což by mohlo být užitečné. Výstup bude následující:

'F001', 'Dox', 'vinay', 'CustomAttr1:varchar(40):Akash, CustomUseDate:Datetime:2009/03/02'

Tímto způsobem potřebujete pouze jeden DB dotaz a výstup lze snadno analyzovat. Pokud chcete uložit atributy jako skutečný Datetime atd. v DB, budete muset použít dynamické SQL, ale já bych se tomu vyhýbal a ukládal hodnoty do varchars.



  1. Android – lepší přístup při načítání obrázků z SD KARTY

  2. Jak opravit „Požadavek COMMIT TRANSACTION nemá odpovídající BEGIN TRANSACTION“ v SQL Server

  3. Mezipaměť výsledků

  4. Co bych si měl vybrat - JSON nebo SQLite?