非标准化表上的MySQL WHERE子句

时间:2015-04-13 07:50:26

标签: mysql where-clause

我想在桌面上进行SELECT查询以获取产品信息。该表的一个字段是"productgroup_ids"。值如下所示:"3||4||13"

这个数据库不是我创建的。

所以我写了一个Rest服务来获取JSON中的内容。现在我想要一个特定组的产品,例如3和4.我得到这样的参数:"3,4"

所以Query应该是这样的:

"SELECT name, description FROM products WHERE productgroup_ids in (3,4);"

但是,我遇到的问题是只有只有3或4的产品才会出现。

我可以使用查询解析字段的值,还是必须读出所有产品,拆分"||",比较,如果它包含请求的组,请将其添加到数组中?< / p>

2 个答案:

答案 0 :(得分:0)

我将假设||是数据库中的分隔符,所以

第一件事: 一个3和13的例子更好,因为这个例子几乎导致我错误的解决方案,对于这个信息: (不正确的解决方案)

"SELECT name, description FROM products WHERE '||'+productgroup_ids+'||' like '%||'+replace('3,4',',','||')+'||%'

但很明显,这不适用于3和13

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

要将字符串拆分为临时表,请看一下: MySQL Split Comma Separated String Into Temp Table

让我们假设临时。 table被称为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+'||%')

Tadaaa。而已。是的,它不是很漂亮,但速度相当快。但这就是数据库设计糟糕的代价: - /

编辑:不得不编辑,选择有点不对:

答案 1 :(得分:0)

由于我选择的数据量很少(不超过50个数据集),我现在选择所有产品将这些字段与组分开,然后用参数进行检查。

现在它有效。但它仍然是一个糟糕的解决方案。