需要一些堆栈溢出的爱。阅读与分组依据和排序依据相关的其他问题,这些答案似乎对我不起作用。我不太了解 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 语句,但是选项和值名称从来没有按顺序排列。
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
编辑:sporting for optionName 分组现在正在处理这个问题。只有 group_concat 中的 valueName 排序不起作用。
SELECT optionName, group_concat(valueName)
FROM itemOptions
WHERE absItemId = 'item1'
GROUP BY optionName
ORDER BY optionPosition
最佳答案
尝试
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
关于iphone - SQLite Group By 和 Order By 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11745127/