我正在为商店构建底层数据库。有2个表,一个用于服装,另一个用于标准尺寸图表。服装有一种或多种尺码,尺码表包含每种尺码服装的几种尺寸。
示例尺寸图表
id size waist chest hips height
0 6 56 76 82 160
0 8 60 80 86 162
0 10 64 84 90 164
0 12 68 88 94 166
1 6 57 75 82 160
1 8 61 79 86 162
1 10 62 83 90 164
1 12 63 87 94 166
示例服装表
garment_id garment_name garment_type size_chart available_sizes
0 Boating Jacket jacket 0 8,10,12
1 Polka Dot Skirt skirt 1 10,12
我想要做的就是加入他们,以便我有
garment_id ... size_chart available_sizes size_chart.id size_chart.size size_chart.(...)
0 ... 0 8,10,12 0 8
0 ... 0 8,10,12 0 10
0 ... 0 8,10,12 0 12
1 ... 1 10,12 1 10
1 ... 1 10,12 1 12
我遇到的问题是如何加入,以便我得到集合中的每个数字(available_size)都有一个相应的测量条目....
关于我如何做到这一点的任何想法/建议/建议都非常有用!
感谢。
答案 0 :(得分:2)
示例服装表
garment_id garment_name garment_type size_chart available_sizes
0 Boating Jacket jacket 0 8,10,12
1 Polka Dot Skirt skirt 1 10,12
是万恶之源 - 所以,跟我说话:
如果我想单独访问它们,我将永远不会在单个数据库字段中存储多个信息。从不。强>
更严重的是,您希望从available_sizes
表中删除garments
字段,而是执行类似
CREATE TABLE available_sizes (
id INT PRIMARY KEY AUTO_INCREMENT,
garment_id INT NOT NULL,
INDEX(garment_id),
size_id INT NOT NULL,
INDEX(size_id)
)
并填充它。这样可以很容易地将一个尺码标记为售罄,甚至可以在表格中添加qty_in_stock INT
,搜索所有相同类型的服装,这些服装有特定尺寸等等。
答案 1 :(得分:0)
一种方法是使用动态SQL。从记忆中,它将是这样的东西:
declare @cmd varchar(1000)
declare @id int
select @id = 0
declare @inVariable varchar(20)
select @inVariable = NULL
while(true)
begin
select @inVariable = availables_sizes from garment where id = @id
if (@inVariable <> NULL OR @inVariable <> '')
begin
if(@id > 0)
begin
select @cmd =
' UNION select g.garment_id, g.size_chart, g.availables_sizes, c.id, c.size
from garments g
inner join chart c on g.size_chart = c.id
and c.id = ' + convert(varchar, @id) + '
and c.size in (' + @invariable + ')'
end
else
begin
select @cmd =
'select g.garment_id, g.size_chart, g.availables_sizes, c.id, c.size
from garments g
inner join chart c on g.size_chart = c.id
and c.id = ' + convert(varchar, @id) + '
and c.size in (' + @invariable + ')'
end
select @id = @id + 1
end
else
begin
break
end
end
exec(@cmd)
现在,就像@EugenRieck所说,这是邪恶的!
答案 2 :(得分:0)
您可以对所有行使用cross join,然后在内部选择初始SELECT子句,以在一列中列出大小。