我是MySQL新手。我的数据库是客户购买的零售产品或webview数据。示例:
ID Records
R1 {iphone5s,levis,Dell,Dior,amazon}
R2 {levis,Dell,amazon,Starbucks,google glass}
R3 {iphone5s,Dell,Dior,google glass}
R4 {iphone5s,levis,Starbucks}
R5 {iphone5s,levis,Dell,google glass}
我想将此数据存储到数据库中。我将此数据存储为:
ID iphone5s levis Dell Dior amazon Starbucks google glass
R1 1 1 1 1 1 0 0
R2 0 1 1 0 1 1 1
R3 1 0 1 1 0 0 1
R4 1 1 0 0 0 1 0
R5 1 1 1 0 0 0 1
create table retail(ID varchar(50),
iphone5s int,
levis int,
Dell int,
Dior int,
amazon int,
Starbucks int,
googleglass int);
insert into retail
values ('r1',1,1,1,1,1,0,0), ('r2',0,1,1,0,1,1,1);
insert into retail
values ('r3',1,0,1,1,0,0,1),('r4',1,1,0,0,0,1,0),('r5',1,1,1,0,0,0,1);
现在我想检索具有 iphone5s 的 ID 并存储这些 id。类似地,我想收集具有每个列名的 id 并存储相应的 id。
使用java我通过以下代码收集列名称:
ResultSet rs = stmt.executeQuery("SELECT * FROM retail");
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
for (int i = 2; i < columnCount + 1; i++ ) {
String name = rsmd.getColumnName(i);
}
现在我想从零售中选择 ID 其中 columnname=1
。
列名每次都应该改变。
最佳答案
来自对问题的评论:
Is any other better way to store the above original data in database system?
绝对是的。您应该将购买的每件商品存储在单独的行中,如下所示:
ID item
-- ------------
R1 iphone5s
R1 levis
R1 Dell
R1 Dior
R1 amazon
R2 levis
R2 Dell
R2 amazon
R2 Starbucks
R2 google glass
...
这使得查询更容易(因为列名是不变的),并且如果您需要添加新产品,则无需更改数据库结构。您始终可以将数据“转换”为您现在拥有的格式,但您不应该以这种方式存储它。
关于mysql - 如何动态更改where子句中的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32413922/