我想在桌面上进行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>
答案 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个数据集),我现在选择所有产品将这些字段与组分开,然后用参数进行检查。
现在它有效。但它仍然是一个糟糕的解决方案。