MySQL выбирает настраиваемые поля с помощью JOIN
Наличие двух таблиц, одна из которых содержит статьи, а другая содержит пользовательские поля для этих статей с отношением одной статьи ко многим пользовательским полям.
Насколько эффективно выполнить объединение для каждого поля, чтобы получить все данные за один раз?
Или есть лучший способ сделать это, который позволил бы использовать пользовательские поля в предложении where?
Я рассматриваю это или изменяю схему таблицы, чтобы приспособить настраиваемые поля.
1 ответ
Если вам нужно отфильтровать статьи по пользовательскому свойству, вы можете сделать:
SELECT * FROM Article WHERE IDArticle IN(SELECT IDArticle FROM ArticleCustomProp WHERE CustomFieldValue='value')
Если вам нужно получить и Статью со всеми ее пользовательскими свойствами, вы можете сделать:
SELECT * FROM Article A LEFT JOIN ArticleCustomProp CP ON A.IDArticle=CP.IDArticle
WHERE A.IDArticle=15
Одна из проблем, с которой вы столкнулись, это тип поля. В вашем ArticleCustomProp вы можете иметь:
IDArticle (INT)
CustomPropertyName (STRING)
CustomPropertyValue (?)
Проблема в том, какой тип дать в поле CustomPropertyValue. Если вам нужно смешать значения нескольких типов, вы должны найти общий способ сохранения данных в этом поле, независимо от типа данных. Надеюсь, это поможет вам. Дайте мне знать, если я могу помочь вам чем-нибудь еще.