MySQL 未规范化的 WHERE 子句 table
MySQL WHERE clause on unnormalized table
我想对 table 进行 SELECT
查询以获取产品信息。 table 的一个字段是 "productgroup_ids"
。值如下所示:"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 字符串拆分为临时 table
2) 用 join
做一个 select
要将字符串拆分为临时 table 看一下:
MySQL Split Comma Separated String Into Temp Table
让我们假设温度。 table 名为 TempJSONCategory 只有一列名为 category。
然后像这样做 select:
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+'||%')
太棒了。而已。是的,它不是很漂亮,但相当快。但这就是糟糕的数据库设计的代价:-/
编辑:不得不编辑,select有点错误:
由于数据量较小(不超过50个数据集),我现在选择所有产品,将字段与组拆分,并通过参数进行检查。
现在可以了。但这仍然是一个糟糕的解决方案。
我想对 table 进行 SELECT
查询以获取产品信息。 table 的一个字段是 "productgroup_ids"
。值如下所示:"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 字符串拆分为临时 table 2) 用 join
做一个 select要将字符串拆分为临时 table 看一下: MySQL Split Comma Separated String Into Temp Table
让我们假设温度。 table 名为 TempJSONCategory 只有一列名为 category。 然后像这样做 select:
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+'||%')
太棒了。而已。是的,它不是很漂亮,但相当快。但这就是糟糕的数据库设计的代价:-/
编辑:不得不编辑,select有点错误:
由于数据量较小(不超过50个数据集),我现在选择所有产品,将字段与组拆分,并通过参数进行检查。
现在可以了。但这仍然是一个糟糕的解决方案。