次のテーブルがあります。
Collections ( 'id', 'name')
(1, 'one collection')
ItemToCollection ( 'item_id', 'collection_id')
(1,1),
(2,1),
(3,1),
...etc
Items ( 'id', 'name' )
(1, 'one'),
(2, 'two'),
(3, 'three'),
(4, 'four'),
(5, 'five'),
(6, 'six'),
(7, 'seven')
CollectionsPositions ( 'col_id', 'item_id', 'pos' )
(1, 2, 2),
(1, 4, 7),
(1, 1, 4)
Collection1のCollectionsPositionsで指定した順番で並んだItemsを返却したいのですが、全てのItemの位置が揃っておらず、一部のItemにNULL値を持つORDER BYで並べられないのが問題です。
私はこのようなことを試みていました:
SELECT FROM ItemToCollection
JOIN Item ON ItemToCollection.item_id = Item.id
LEFT JOIN CollectionsPositions
ON col_id = 1 AND item_id = ItemToCollection.item_id
WHERE ItemToCollection.collection_id = 1
それは私に次のようなものを返します: column 'pos':
NULL,
NULL,
NULL,
NULL,
NULL,
2,
4,
7
次の順序でアイテムを注文するにはどうすればよいですか :?
NULL,
2,
NULL,
4,
NULL,
NULL,
7
新しい列を作成してその列で並べ替える必要があることは理解していますが、並べ替えるために新しい列を生成するときに、既に定義されている位置をどのように処理すればよいでしょうか?