mysql - 如何动态更改where子句中的列?

标签 mysql jdbc

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

相关文章:

mysql - 仅当不再引用其他表时才删除条目

mysql - 在mysql上显示数据3表

mysql - 当 2 个不同的行满足我的要求时返回共享列值

mysql - 对具有 3500 万行的 mysql 表进行非常缓慢的查询

java - 使用 Java 加速对 MySQL 的查询调用

mysql - sql如果为空则显示0

Java将记录插入Oracle 9i

java - 如何通过Java中的ssh隧道连接到MySQL数据库?

java - 在 SWING 框架中显示 MySQL 表

java - 兼容 Oracle 10g 和 Java 1.8 的 JDBC 驱动程序