我们正在使用实体-属性-值模式在我们的项目中存储对象。基本上是这样的:
entity - 所有条目原型(汽车、房屋等)的虚拟存储
条目(单个实体对象的表示)
- ID
- entity_id
- ...
参数(所有实体属性颜色、名称、品牌等)
- ID
- 姓名
- …</li>
值(一个条目和参数的单个值)
- ID
- entry_id(entry.id 的外键)
- parameter_id(parameter.id 的外键)
- 价值(实际价值)
这些表代表存储在 MySQL 数据库中的动态表。
该方案的唯一问题是对 2 个(或更多)参数进行排序。例如,按制造年份 DESC 和品牌 ASC 对所有汽车进行排序。
我们需要的最终结果是条目 id 的排序列表。
对于这些对象:
实体
id | name
------------------------------
1 | Car
------------------------------
入口
id| entity_id
-------------
1 | 1
-------------
2 | 1
-------------
3 | 1
-------------
范围
id| entity_id | name
-----------------------
1 | 1 | Brand
-----------------------
2 | 1 | Year
-----------------------
价值
id | entry_id | parameter_id | value
----------------------------------------------
1 | 1 | 1 | Tatra
----------------------------------------------
2 | 1 | 2 | 2005
----------------------------------------------
3 | 2 | 1 | Aston Martin
----------------------------------------------
4 | 2 | 2 | 1999
----------------------------------------------
5 | 3 | 1 | Man
----------------------------------------------
6 | 3 | 2 | 2005
----------------------------------------------
根据给定标准,这些条目的正确顺序应该是 3、1、2。