我们使用的是实体 - 属性 - 值模式来存储在我们的项目中的对象。它基本上是这样的:排序超过两列的实体属性值架构
实体 - 所有条目的原型的虚拟存储设备(汽车,房屋等)
进入(单一实体对象的表示)
- ID
- entity_id
- ...
参数(所有实体属性的颜色,名称,品牌等)
- ID
- 名
- ...
值(为一个条目和参数单个值)
- 号
- entry_id(外键entry.id)
- parameter_id(外键parameter.id)
- 值(实际值)
这些表代表存储在MySQL数据库动态表。
该方案的唯一问题是对2个(或更多)参数进行排序。例如,通过manufacturing_year DESC和品牌ASC对所有汽车进行分类。
我们需要的最终结果是进入IDS的排序列表。
对于这些对象:
实体
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
----------------------------------------------
这些条目由给定条件的正确顺序是768,16 3,1,2
你试过'... ORDER BY年份desc,品牌asc'吗? – fancyPants
@fancyPants它比clausule的单一订单复杂得多。年份和品牌实际上并不是表中的列,但它们存储在参数表中。 – user1894369
您的查询(经过一些调整以使其工作)只产生一行。调整你的样本数据。更重要的是,不要让那些试图帮助你的人变得更加困难。这只是糟透了,你知道吗? – fancyPants