我想提取从EAV(实体属性值)的表,或更具体实体的元数据表的结果(认为像WordPress wp_posts和wp_postmeta),为"很好的格式化的关系表",以做一些排序和/或过滤.
我已经找到了一些如何在查询中格式化结果的示例(而不是编写2个查询并在代码中加入结果),但我想知道"最有效"的方法,特别是对于更大的结果集.
当我说"效率最高"时,我的意思是出现以下情况:
获取姓氏为XYZ的所有实体
返回按生日排序的实体列表
转过来:
** ENTITY ** ----------------------- ID | NAME | whatever ----------------------- 1 | bob | etc 2 | jane | etc 3 | tom | etc ** META ** ------------------------------------ ID | EntityID | KEY | VALUE ------------------------------------ 1 | 1 | first name | Bob 2 | 1 | last name | Bobson 3 | 1 | birthday | 1983-10-10 . | 2 | first name | Jane …
mysql performance database-design pivot entity-attribute-value
现在我打算在我的网站上添加一个过滤系统.
例子:
(ID=apple, COLOR=red, TASTE=sweet, ORIGIN=US)
(ID=mango, COLOR=yellow, TASTE=sweet, ORIGIN=MEXICO)
(ID=banana, COLOR=yellow, TASTE=bitter-sweet, ORIGIN=US)
Run Code Online (Sandbox Code Playgroud)
所以现在我有兴趣做以下事情:SELECT ID FROM thisTable WHERE COLOR ='yellow'AND TASTE ='SWEET'
但我的问题是我在我的网站中为多个类别执行此操作,并且列不一致.(如果桌子是用于手机,那么它将是品牌,3G-ENABLED,价格,颜色,波长等)
我怎么能设计一个允许这个的通用模式?
现在我正计划做:
table(ID, KEY, VALUE)
Run Code Online (Sandbox Code Playgroud)
这允许任意数量的列,但对于查询,我使用SELECT ID FROM表WHERE(KEY = X1 AND VALUE = V1)AND(KEY = X2 AND VALUE = V2),..返回空集.
有人可以推荐一个很好的解决方案吗?请注意,列数将定期更改