0

需要一些堆栈溢出的爱。阅读与 group by 和 sort by 相关的其他问题,这些答案似乎对我不起作用。我在 db 语句的更详细的细节方面并不是很强大,并且认为我缺少的 group 和 order by 语句之间存在一些依赖或冲突。

我有一个表(itemOptions),其中包含一个项目的所有选项以及这些选项的所有可能值。考虑一个项目的多个选择/下拉框以及每个下拉列表的值列表。不幸的是,我无法更改数据库结构,因为 Web 服务正在提供 sqlite 文件。

这是结构:

absTtemId    optionName    optionPosition  valueName  valuePosition
item1        size             1             small        1 
item1        size             1             medium       2 
item1        size             1             large        3 
item1        color            2             white        1 
item1        color            2             red          2 
item1        color            2             yellow       3 
item2        name             1             willis       1 
item2        name             1             smith        2 
item2        name             1             bowman       3

查询需要返回按 optionPosition 排序的给定项目的 optionsNames,然后返回按 valueposition 排序的每个选项的 valueNames 列表,如下所示

option   valueNames
size     small, medium, large
color    white, red, yellow

我可以通过选项对 valueNames 进行分组,但是当我尝试在任何地方添加排序时,sqlite 会引发错误。

这是我当前返回这些结果的 sql 语句,但是 option 和 valueNames 从不按顺序排列。

SELECT   optionName, group_concat(valueName) 
FROM     itemOptions  
WHERE    absItemId = 'item1' 
GROUP BY optionName

option   valueNames
size     medium, small, large
color    yellow, red, white

这是我为 valueName 和 optionName 添加排序的一些失败尝试

SELECT   optionName, group_concat(valueName ORDER BY valuePosition DESC) 
FROM     itemOptions  
WHERE    absItemId = 'item1' 
GROUP BY optionName

编辑: optionName 分组的运动现在正在使用这个。只有 group_concat 中的 valueName 排序不起作用。

SELECT   optionName, group_concat(valueName) 
FROM     itemOptions  
WHERE    absItemId = 'item1' 
GROUP BY optionName 
ORDER BY optionPosition
4

1 回答 1

2

尝试

SELECT a.optionName, group_concat(a.valueName) 
FROM (SELECT * FROM itemOptions ORDER BY valuePosition ASC) As a
WHERE a.absItemId = 'item1' 
GROUP BY a.optionName
ORDER BY a.optionName
于 2012-07-31T17:00:09.117 回答