非规范化表上的MySQL WHERE子句

非规范化表上的MySQL WHERE子句,mysql,where-clause,Mysql,Where Clause,我想对表执行SELECT查询以获取产品信息。该表的一个字段是productgroup\u ID。值如下所示:3 | 4 | 13 这个数据库不是我创建的 因此,我编写了一个Rest服务来获取JSON中的内容。现在我想要特定类别的产品,例如3和4。我得到如下参数:3,4 那么查询应该如下所示: "SELECT name, description FROM products WHERE productgroup_ids in (3,4);" 但是,我有一个问题,那就是结果中只有3或4的产品 我可以

我想对表执行SELECT查询以获取产品信息。该表的一个字段是productgroup\u ID。值如下所示:3 | 4 | 13

这个数据库不是我创建的

因此,我编写了一个Rest服务来获取JSON中的内容。现在我想要特定类别的产品,例如3和4。我得到如下参数:3,4

那么查询应该如下所示:

"SELECT name, description FROM products WHERE productgroup_ids in (3,4);"
但是,我有一个问题,那就是结果中只有3或4的产品

我可以用查询解析字段的值吗?或者我必须读取所有产品、拆分| |并进行比较,如果它包含请求的组,则将其添加到数组中吗?

我将假定| |是数据库中的分隔符

第一件事: 3和13的例子更好,因为这个例子几乎让我找到了一个错误的解决方案,关于这个: 不正确的解决方案

"SELECT name, description FROM products WHERE '||'+productgroup_ids+'||' like '%||'+replace('3,4',',','||')+'||%'
但显然,这对3和13不起作用

那现在呢。显而易见的答案是没有简单的方法。 解决办法是: 1将JSON字符串拆分为临时表 2使用联接进行选择

要将字符串拆分为临时表,请查看以下内容:

让我们假设温度。表名为TempJSONCategory,它只有一列名为category。 然后进行如下选择:

SELECT name, description 
  FROM products 
 WHERE products_primary_key in
       (select products_primary_key 
          from products
          join TempJSONCategory 
            on '||'+products.productgroup_ids+'||' like '%||'+TempJSONCategory.category+'||%')
塔达阿。就这样。是的,它不是很漂亮,但是相当快。但这是一个糟糕的DB设计的代价:-/


编辑:必须编辑,选择有点错误:

因为数据量小,我现在选择的数据集不超过50个。所有产品都将字段与组分开,并使用参数进行检查


现在它起作用了。但这仍然是一个糟糕的解决方案。

是的,3和13等的问题是我问这个问题的原因:你的第二个建议应该是正确的,但这么多的工作实际上一无所获。我不能规范化这些表,因为有人管理使用这个数据库的CMS。。。