Я работаю с базой данных, созданной, как это:Что такое эффективный способ запроса от модели сущность-атрибут-значение
entity field value
1 start_date June 1, 2010
1 end_date August 30, 2010
1 artist some name
И я хочу, чтобы запросить все объекты с именем художника «некоторые имя ", которое началось, но не закончилось.
я придумал что-то вроде этого:
SELECT start.entity
FROM field_values AS `start`
INNER JOIN field_values AS `end`
INNER JOIN field_values AS `artist`
WHERE
(start.field = 'start_date' AND end.field = 'end_date' AND artist.field='artist') AND
(STR_TO_DATE(start.value, '%M %d, %Y') < NOW() AND
STR_TO_DATE(end.value, '%M %d, %Y') > NOW()) AND
artist.value="some artist";
Но это не поражает меня как невероятно эффективным. Есть ли лучший подход к этому?
Наиболее эффективным решением является преобразование этих атрибутов в столбцы и устранение EAV. :) – Thomas
@Thomas Как я мог бы это сделать – blockhead
Чтобы расширить то, что говорит Томас: Эта идея EAV не бесполезна, но вы не хотите использовать ее для атрибутов, важных для определения сущностей. Вы знаете, что атрибут определенно «слишком важен для EAV», когда вы хотите использовать его в предложениях JOIN, ORDER BYs или WHERE. – grossvogel