我是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);
}
现在,我要从零售
where columnname=1
中选择ID。列名应每次更改。
最佳答案
从对问题的评论:
还有其他更好的方法将上述原始数据存储在数据库系统中吗?
绝对。您应该将购买的每个商品存储在单独的行中,如下所示:
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/