sql >> Database >  >> RDS >> Mysql

Een MySQL-schema voor entiteit-kenmerk-waarde draaien

De vraag vermeldt MySQL, en in feite heeft dit DBMS een speciale functie voor dit soort problemen:GROUP_CONCAT(expr) . Kijk eens in de MySQL-referentie handleiding over group-by-functions . De functie is toegevoegd in MySQL versie 4.1. Je gebruikt GROUP BY FileID in de zoekopdracht.

Ik weet niet precies hoe je wilt dat het resultaat eruitziet. Als u elk kenmerk voor elk item wilt vermelden (zelfs als dit niet is ingesteld), wordt het moeilijker. Dit is echter mijn suggestie om het te doen:

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;

Dit geeft je alle attributen in dezelfde volgorde, wat handig kan zijn. De uitvoer zal als volgt zijn:

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

Op deze manier heeft u slechts één enkele DB-query nodig en is de uitvoer eenvoudig te ontleden. Als je de attributen als echte Datetime enz. in de DB wilt opslaan, moet je dynamische SQL gebruiken, maar ik zou daar afstand van nemen en de waarden opslaan in varchars.



  1. Hoe krijg ik een datum in de indeling JJJJ-MM-DD uit een TSQL-datetime-veld?

  2. PostgreSQL samengestelde primaire sleutel

  3. SQL MAX() voor beginners

  4. Wat gebruikt LISTAGG met ORDER BY NULL eigenlijk als bestelcriterium?