我正在尝试创建一个产品页面,其中显示了产品信息以及价格和尺寸。每种产品都有多种价格和尺寸。
我有多张桌子(产品,尺寸,价格),而且我正在使用" joiner"只有那些表作为外键的表。这是我最困惑的地方。
SCHEMA
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name TEXT,
description TEXT,
);
CREATE TABLE sizes (
id SERIAL PRIMARY KEY,
height INT,
width INT,
garmentSize TEXT
);
CREATE TABLE prices (
id SERIAL PRIMARY KEY,
price INT
);
CREATE TABLE product_price_size ( --joiner table
id SERIAL PRIMARY KEY,
productId INTEGER REFERENCES products(id),
priceId INTEGER REFERENCES prices(id),
sizeId INTEGER REFERENCES sizes(id)
);
INSERT INTO products (name, description)
VALUES ('Take A Hike', 'Take A Hike vinyl decal');
INSERT INTO products (name, description)
VALUES ('Wanderlust', 'Wanderlust vinyl decal');
INSERT INTO prices (price) VALUES (4);
INSERT INTO prices (price) VALUES (6);
INSERT INTO prices (price) VALUES (8);
INSERT INTO sizes (height, width, garmentSize) VALUES (3, 3, null);
INSERT INTO sizes (height, width, garmentSize) VALUES (4, 5, null);
INSERT INTO sizes (height, width, garmentSize) VALUES (7, 2, null);
INSERT INTO product_price_size (productId, priceId, sizeid) VALUES (1, 1, 1);
INSERT INTO product_price_size (productId, priceId, sizeid) VALUES (1, 2, 2);
INSERT INTO product_price_size (productId, priceId, sizeid) VALUES (1, 3, 3);
INSERT INTO product_price_size (productId, priceId, sizeid) VALUES (2, 2, 3);
INSERT INTO product_price_size (productId, priceId, sizeid) VALUES (2, 2, 2);
INSERT INTO product_price_size (productId, priceId, sizeid) VALUES (2, 1, 3);
我需要让每个产品都显示出与其相关价格的多种尺寸,我不确定如何完成。我使用Angular来到"mysite.com/products/2"
,在这个例子中从产品表中获取第二个产品,所以如果我当前转到产品页面,会出现错误,因为目前有三个"产品.id" s引用产品ID 2。
QUERY
SELECT products.name, prices.price, sizes.height, sizes.width FROM products
INNER JOIN product_price_size ON products.id = product_price_size.productId
INNER JOIN prices ON prices.id = product_price_size.priceId
INNER JOIN sizes ON sizes.id = product_price_size.sizeId
我想我可能需要一个子查询,但我承认我迷失了这个。
我希望这不会让人感到困惑,对于我这样做的任何想法或更好的想法都非常感激。谢谢!! 基思