有一些特殊要求的多行排序


Multiple row sorting with some special requirements

我正在努力为电子商务网站实现一些目标,其想法是按子类别排列结果,但要确保所选特定类别的所有项目都显示在第一位,第二类别显示在最后。

问题是,我希望能够将具有相同子类别的所有项目合并到同一部分;这是在一个项目的情况下,它与次要类别相匹配,但也有一个项目与特定类别相匹配——这些应该放在一起。

我可以通过生成Select来完成此操作。。联合所有。。选择通常使用PHP,但这会使查询速度变慢,具体取决于生成了多少联合语句和选择语句。

我想看看是否有人对如何做到这一点有更好的想法——我得到的最接近的是这个SQL来获得我想要的结果,但它仍然没有把所有的子类别项目放在一起,如果我把子类别放在第一位,然后我要找的特定类别的项目没有出现在列表的顶部,它们就会与第二类别混淆。

    SELECT myFields FROM  items where (category = :category or 
FIND_IN_SET(:category,secondaryCATEGORIES)>0)and moreFilters 
ORDER BY CASE WHEN Category= :category THEN 1 ELSE 2 END ASC,subcategory ASC 

样本数据:

名称类别子类别secondary类别适配器1适配器音频适配器音频Adapter2适配器视频适配器视频Adapter3网络适配器Adapter4音频适配器

排序后为:

名称类别子类别secondary类别适配器1适配器音频适配器音频Adapter2适配器视频适配器视频Adapter4音频适配器Adapter3网络适配器

我想要的是:

名称类别子类别secondary类别适配器1适配器音频适配器音频Adapter4音频适配器Adapter2适配器视频适配器视频Adapter3网络适配器

为了防止有人对此感到疑惑,我在程序中添加了一些代码来解决这个问题。

我所做的是首先对子类别进行选择和排序,一旦我按顺序获得子类别,我就用它们来生成SQL查询,使用循环来生成"当子类别={subcategory_from_query[1]}时,然后是1当子类别={subategory_fro_query[2]},然后是2,依此类推"

如果添加一个示例php代码有助于让我知道,我会发布它。