【问题标题】:Select with comma in field?在字段中用逗号选择?
【发布时间】:2017-08-14 06:25:21
【问题描述】:

我想在 mysql 上选择条件“字符串中的逗号”。

我有表product,它有字段:'id, name, rack'

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

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

如何在mysql上选择这个?

select * from product where rack=' + vrack

编辑:添加表格截图

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

【问题讨论】:

  • 参见 IN()。差不多就这些了
  • 嗨,你能举个例子吗?我放了表格截图,如果我有 vrack string="P1,K2,G1",我试过:select * from product where rack in ('P1,K2,G1'),它显示 0 结果。谢谢
  • 您必须将输入操作为 'P1','K2','G1'
  • 经验教训:永远不要存储逗号分隔的数据。
  • @Victoria 很可能是有太多变数而无法成为可行的灵魂。

标签: mysql string where comma


【解决方案1】:

创建明细表。您可以通过外键链接表 RackProduct。不要在数据库中存储逗号分隔的值。例如 PostgreSQL 有这种情况下的数组数据类型,但那是 PostgreSQL,而不是 MySQL,即使在那里你也应该考虑是否真的需要它。

但是,如果您需要将多个位信息存储到单个字段中并且不超过 64 个不同的位,您可以创建一个整数字段类型并构建一个位掩码(但这似乎不是您的案例)。

【讨论】:

  • +1 用于使 Rack 成为自己的实体,创建 Product-Rack 关系表。回答问题并解决潜在的设计缺陷。
  • 您确定FIND_IN_SET 可以按照您的描述使用吗?我原以为它会像这样工作:WHERE FIND_IN_SET('P1', Rack) or FIND_IN_SET('K2', Rack) or ...
  • 没有。但我依赖this accepted answer 和参考(看看他们如何构建第二个参数)。手头没有MySQL。不过,这里的重点是摆脱这种设计。
  • 逗号分隔的字符串是Rack 列。 This function does not work properly if the first argument contains a comma (,) character.
  • @kobik,好吧,那你可能是对的。然后有人收到了 13 票并接受了错误的答案。我删除了那个额外的内容,因为我错过了那个很好的笔记(不能正常工作意味着什么?周一到周五工作,但周末不行?)。感谢您指出这一点!
【解决方案2】:

试试这个:-

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

【讨论】:

  • 试过了,但它没有显示我需要什么。如果产品名称'A'有机架'A1,B2',那么我尝试从产品中选择*,其中机架='%A1,B2%'然后它会显示A,如果我有'B'和机架'A1'它不会' t 显示。我需要它显示在 vrack 上键入的所有内容......类似于 select * from product where rack='A1' 或 rack='B2'。但是 vrack 不仅限于 1 或 2 个机架,它取决于用户键入的可能是 A1、B2、B3、C1 甚至只有 A1
  • 你能给你的表数据和查询的屏幕截图吗?
  • select * from product where rack in ('A1','B2');
  • 我编辑的帖子上的表格数据链接,这是查询i1132.photobucket.com/albums/m561/slianto/rack2_zpsqbs2pikz.png的链接
  • @StevanusLianto 这是垃圾邮件吗?
猜你喜欢
  • 1970-01-01
  • 2017-05-12
  • 2012-10-07
  • 1970-01-01
  • 1970-01-01
  • 2012-03-20
  • 1970-01-01
  • 2015-05-06
  • 1970-01-01
相关资源
最近更新 更多