非规范化表上的MySQL WHERE子句
我想对表执行SELECT查询以获取产品信息。该表的一个字段是productgroup\u ID。值如下所示:3 | 4 | 13 这个数据库不是我创建的 因此,我编写了一个Rest服务来获取JSON中的内容。现在我想要特定类别的产品,例如3和4。我得到如下参数:3,4 那么查询应该如下所示:非规范化表上的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 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。。。