Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да завъртите схема на MySQL обект-атрибут-стойност

Въпросът споменава MySQL и всъщност тази СУБД има специална функция за този вид проблеми:GROUP_CONCAT(expr) . Разгледайте в Справочник за MySQL ръководство за група по функции . Функцията е добавена в MySQL версия 4.1. Ще използвате GROUP BY FileID в заявката.

Не съм много сигурен как искате да изглежда резултатът. Ако искате всеки атрибут да бъде изброен за всеки елемент (дори и да не е зададен), ще бъде по-трудно. Това обаче е моето предложение как да го направя:

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;

Това ви дава всички атрибути в същия ред, което може да бъде полезно. Резултатът ще бъде както следва:

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

По този начин имате нужда само от една заявка от DB и изходът е лесен за анализиране. Ако искате да съхраните атрибутите като реално време за дата и т.н. в DB, ​​ще трябва да използвате динамичен SQL, но бих останал настрана от това и бих съхранявал стойностите във varchars.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Каква е разликата между обединения, разделени със запетая, и присъединяване по синтаксис в MySQL?

  2. Мониторинг на Percona сървър за MySQL - ключови метрики

  3. Максимална дължина на MySQL и GROUP_CONCAT().

  4. 8-те най-популярни бази данни

  5. Данните с отворен код нарастват:Избор на MySQL, NoSQL или и двете