需要一些堆栈溢出的爱。阅读与 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