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

时间:2016-05-02 03:41:12

标签: php mysql

我正在尝试为电子商务网站实现某些目标,其目的是通过子类别获得结果顺序,但要确保所选特定类别中的所有项目首先显示,而secondaryCategories显示的项目最后显示。

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

能够做到这一点生成一个Select ..Union All ..用PHP选择...但是这会使查询变慢,具体取决于生成了多少union和select语句。

我想看看有没有人更好地了解如何做到这一点我得到的最接近的是这个SQL来获得我想要的结果但它仍然没有把所有子类别项目放在一起,如果我把子类别放在第一位那时候,我要查找的特定类别的项目没有出现在列表的顶部,它们与secondaryCategories混在一起。

    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 

示例数据:

Name           Category          Subcategory       secondaryCategories
Adapter1       Adapters          Audio Adapter     Audio
Adapter2       Adapters          Video Adapter     Video
Adapter3       Network           Network Adapters  Adapters
Adapter4       Audio             Audio Adapter     Adapters

排序后:

Name           Category          Subcategory       secondaryCategories
Adapter1       Adapters          Audio Adapter     Audio
Adapter2       Adapters          Video Adapter     Video
Adapter4       Audio             Audio Adapter     Adapters
Adapter3       Network           Network Adapters  Adapters

我想要的是:

Name           Category          Subcategory       secondaryCategories
Adapter1       Adapters          Audio Adapter     Audio
Adapter4       Audio             Audio Adapter     Adapters
Adapter2       Adapters          Video Adapter     Video
Adapter3       Network           Network Adapters  Adapters

1 个答案:

答案 0 :(得分:0)

万一有人想知道同样的问题,我通过在程序中添加一些代码解决了这个问题。

我做的是首先对子类别进行选择和排序,一旦我得到子类别,我就用它来生成SQL查询,使用循环生成“when subcategory = {subcategory_from_query [1]}然后1 subcategory = {subcategory_from_query [2]}然后2,依此类推“

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