2012-07-31 71 views
0

需要一些堆栈溢出爱。阅读其他与小组有关的问题,然后排序,这些答案似乎不适合我。我在db语句的更精细的细节方面并不是很强大,并且认为我缺少的语句在组和命令之间存在一些依赖性或冲突。SQLite Group按顺序不工作

我有一个表(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 

查询需要返回optionsNames由optionPosition下令给定的项目,然后通过valueposition下令每个选项valueNames的列表,这样

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

我能够通过选项获得valueNames的分组来工作,但是当我尝试在任何地方添加排序时,sqlite会抛出错误。

这是我的当前sql语句返回这些结果,但选项和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 
+0

我整理与工作选项 “中选择OPTIONNAME,GROUP_CONCAT(VALUENAME)FROM itemOptions WHERE absItemId = '物品1' GROUP BY OPTIONNAME ORDER BY optionPosition”。我在这做一个使用错误,唯一的排序,现在没有工作现在是valueName – Augie 2012-07-31 16:56:27

+0

也许你需要做子查询,因为sqlite可能不支持'ORDER BY'里面的'GROUP_CONCAT' http://stackoverflow.com/questions/1897352/sqlite-group-concat-ordering – mask8 2012-07-31 16:59:43

+0

@ mask8,我想知道如果ios5 sqlite有这样的事情,因为安德森先生的解决方案修复了问题,当在firefox sqlite工具中完成查询时,但不是在ios5 sqlite查询中。再看一下代码可以肯定。谢谢。 – Augie 2012-07-31 17:19:05

回答

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 
+0

当我在sqlite工具中进行查询时,这得到了它的效果,谢谢,而不是在iPhone应用程序中。我现在正在查看objC代码,以查看代码错误是否是罪魁祸首,并且会返回并将其作为答案进行检查,如果是,现在就给它一个1。 – Augie 2012-07-31 17:17:27

+0

你的意思是“SELECT a.optionName,group_concat(a.valueName)...”对吗? – Augie 2012-07-31 17:21:56

+0

是的,它应该是 – 2012-07-31 17:29:52