2017-08-14 70 views
1

我想在条件为“字符串逗号”的情况下选择mysql。我有表product,它有字段:'id, name, rack'用逗号在字段中选择?

我想搜索特定机架上的产品,因此用户将用逗号输入一些字符串。所以我有一个字符串变量,就像这样:

vrack='d1,a2,x3,a1'或有时vrack='a1' or vrack='b1,c3'

如何在mysql的选择呢?

select * from product where rack=' + vrack

编辑:添加的表格截图

table screenshot

所以,如果我有vrack:='P1,K2,G1'那么输出应该显示Ball,Pencil,Eraser

+5

参见IN()。这几乎是 – Strawberry

+0

嗨,你能举个例子吗?我把表格截图,如果我有vrack字符串=“P1,K2,G1”,我试过:select * from产品机架('P1,K2,G1'),它显示0结果。谢谢 –

+0

你必须操纵你的输入为'P1','K2','G1' – Strawberry

回答

5

创建一个细节表。你可以有一个表机架产品由外键链接。不要在数据库中存储逗号分隔值。例如,PostgreSQL有这种情况下的数组数据类型,但这是PostgreSQL,而不是MySQL,甚至在那里你应该考虑是否真的需要它。但是,如果您需要将多个位信息存储到一个字段中,并且它不超过64个不同的位,则可以创建一个整数字段类型并构建一个位掩码(但似乎不是你的情况)。

+3

+1用于制作Rack自己的实体,创建Product-Rack关系表。回答问题并解决潜在的设计缺陷。 – nil

+0

你确定'FIND_IN_SET'可以像你描述的那样使用吗?我希望它的工作方式如下:'WHERE FIND_IN_SET('P1',Rack)或FIND_IN_SET('K2',Rack)或者......' – kobik

+0

不可以。但是我依赖[这个接受的答案](https:// stackoverflow.com/a/16990413/8041231)和参考资料(请参阅他们如何构建第二个参数)。手工没有MySQL。不过,重点在于摆脱这种设计。 – Victoria

1

试试这个: -

select * from product where rack in ('A1','B2'); 
+0

尝试过,但它没有显示我需要什么。如果产品名称'A'有机架'A1,B2',那么我尝试从产品机架中选择*机架='%A1,B2%',那么它将显示A,如果我'B'与机架'A1'显示。我需要它显示所有输入vrack ....类似于选择*从产品机架='A1'或机架='B2'。但vrack不仅限于1或2个机架,它取决于用户输入的可能是A1,B2,B3,C1或甚至只有A1 –

+1

您可以给出表格数据和查询的屏幕截图吗? – Amit

+1

select * from rack where('A1','B2'); – Amit