У меня есть две таблицы, одна действует как корзина покупок, где каждая строка ссылается на пользователя.Другой - для товаров в корзинах с внешним ключом, ссылающимся на идентификатор корзины.Я пытаюсь найти лучший способ сделать серийные идентификаторы для каждого товара в каждой отдельной корзине.
Сейчас я заказываю товары по их номеру, а затем просто получаю товар по правильному индексув результирующем массиве, но это невероятно неэффективно, поскольку мне нужно получить всю таблицу элементов только для того, чтобы получить один элемент.
Вот как в настоящее время выглядят мои таблицы:
CREATE TABLE carts (
id SERIAL PRIMARY KEY,
userId INT NOT NULL REFERENCES users(id),
isOrder BOOLEAN DEFAULT FALSE,
created TIMESTAMP WITH TIME ZONE NOT NULL
DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE items (
id SERIAL PRIMARY KEY,
cartId INTEGER NOT NULL REFERENCES carts(id),
product INTEGER NOT NULL REFERENCES products(id),
quantity INTEGER DEFAULT 1
);
ЧтоЯ бы хотел, чтобы таблица предметов выглядела примерно так:
id | cartid | product | quantity
----+--------+---------+----------
1 | 1 | 3 | 450
2 | 1 | 5 | 45
3 | 1 | 1 | 45
4 | 1 | 9 | 45
1 | 2 | 4 | 45
2 | 2 | 4 | 45
3 | 2 | 5 | 45
4 | 2 | 8 | 45
Итак, я хочу иметь возможность получить, скажем, пятый предмет, добавленный в корзину № 2, примерно так:
SELECT * FROM items
WHERE id = 5 AND cartId = 2
Вместо того, что я делаю сейчас:
SELECT * FROM items
WHERE cartId = 2
ORDER BY id
И в массив Javascript, который передается в:
Const item = result.rows[4]
Есть ли способ настроитьтаблицы для этого?