需要一些堆栈溢出的爱。阅读与分组和排序相关的其他问题,这些答案似乎对我不起作用。我对db语句的更精细细节并不十分强烈,并且认为组合和订单之间存在一些依赖或冲突我缺少的语句。
我有一个表(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
编辑:运动for optionName分组现在正在使用此功能。只有group_concat中的valueName排序不起作用。
SELECT optionName, group_concat(valueName)
FROM itemOptions
WHERE absItemId = 'item1'
GROUP BY optionName
ORDER BY optionPosition
答案 0 :(得分:1)
试
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