【发布时间】:2012-09-01 23:44:21
【问题描述】:
我的实体具有多个属性,具有以下简化架构:
实体:
- 身份证
属性:
- 身份证
- 姓名
实体属性:
- entity_id
- attribute_id
如果我想检索具有名为“男性”的属性的记录,我可以这样写:
SELECT * FROM Entity
INNER JOIN entity_attribute ON ...
INNER JOIN Attribute ON ...
WHERE Attribute.name = 'male'
如果我想检索属性名为“男”或“老师”的记录,我可以这样写:
SELECT * FROM Entity
INNER JOIN entity_attribute ON ...
INNER JOIN Attribute ON ...
WHERE Attribute.name = 'male' OR Attribute.name = 'teacher'
如果我想检索属性名为“男”和属性名为“老师”的记录,我可以这样写:
SELECT *, COUNT(*) AS cnt FROM Entity
INNER JOIN entity_attribute ON ...
INNER JOIN Attribute ON ...
WHERE Attribute.name = 'male' OR Attribute.name = 'teacher'
HAVING cnt = 2
现在是棘手的部分。我的查询需要包含 and 和 or 组合在 manytomany 查询中。
示例:
哪些实体是[(具有属性“男性”)和(具有属性“老师”或具有属性“园丁”)和(具有属性“likes_apple”或具有属性“likes_orange”或具有属性'likes_cherry')]。
使用子查询可能是一种解决方案,但据我所知,这会很慢(~10000 个实体,~30 个属性,~15000 个实体属性)。什么是快速的解决方案?
【问题讨论】:
标签: mysql hibernate doctrine-orm