我是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/

10-14 12:52
查看更多