Я пишу программное обеспечение, в котором у меня есть размер ящика (ширина = 10, высота = 20, длина = 10) и база данных Postgres с полками (также определенными по ширине, высоте, длине). Теперь я хочу найти все полки, в которые можно поместить поле c (размеры полки должны быть больше или равны размеру коробки). Первоначально я думал, что смогу сделать это:
SELECT shelves.* WHERE shelves.width = 10 AND shelves.height = 20 AND shelves.length = 10
Тем не менее, моя коробка может поместиться на любой из этих полок, потому что ее можно просто повернуть, чтобы установить:
|------|---------|----------|----------|
| id | width | height | length |
|------|---------|----------|----------|
| 1 | 20 | 10 | 10 |
|------|---------|----------|----------|
| 2 | 10 | 20 | 10 |
|------|---------|----------|----------|
| 2 | 10 | 10 | 20 |
|------|---------|----------|----------|
Так в JavaScript этот код будет выглядеть следующим образом:
const boxdim = [box.width, box.height, box.length].sort();
const shelfdim = [shelf.width, shelf.height, shelf.length].sort();
const canFit = boxdim[0] <= shelfdim[0] && boxdim[1] <= shelfdim[1] && boxdim[2] <= shelfdim[2];
Возможно ли сделать это в Postgres? Мне нужно что-то похожее на это (явно псевдокод и не работает:
SELECT shelves.* WHERE SORT(shelves.width, shelves.height, shelves.length)[0] = 10 AND SORT(shelves.width, shelves.height, shelves.length)[1] = 10 AND SORT(shelves.width, shelves.height, shelves.length)[2] = 20
Любые советы приветствуются.