スタックオーバーフローの愛が必要です。groupbyとsortbyに関連する他の質問を読んでください。それらの回答は、私にはうまくいかないようです。私はdbステートメントの詳細にあまり強くなく、欠落しているステートメントによるグループと順序の間に依存関係または競合があると思います。
アイテムのすべてのオプションとそれらのオプションのすべての可能な値を保持するテーブル(itemOptions)があります。アイテムの複数の選択/ドロップダウンボックスと、各ドロップダウンの値のリストを考えてみてください。残念ながら、Webサービスがsqliteファイルを提供しているため、db構造を変更することはできません。
構造は次のとおりです。
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