【问题标题】:MySQL select rows with array values between a min and a maxMySQL选择数组值在最小值和最大值之间的行
【发布时间】:2013-11-13 18:34:04
【问题描述】:

我遇到了这个问题……

我有一个像数组一样的字段,值用空格分隔。 假设我们有这些值:

v1: "100 150 200 300"
v2: "50 100"
V3: "130 230 415"
v4: "340 500 600"
...

然后我有两个用户输入值,例如最小值和最大值,比如 120 和 300。 我需要用 mysql 从表中选择所有具有这些最小值和最大值之间的数组值的行

所以输出应该是前面例子中的 v1 和 v3。

有人可以帮帮我吗?

【问题讨论】:

  • 这个难度应该教会你不要将数组值放入关系数据库中。规范化你的架构,问题就很简单了。
  • 这是一种糟糕的做法。建立关系the right way,你就没有these problems
  • 你需要使用某种类型的 UDF
  • 正如我告诉@popovitsj 的那样,这是一个很难更改的大型完整数据库。并且数组字段可以包含 1 到 10 个元素..

标签: mysql sql arrays denormalized


【解决方案1】:

我完全同意 cmets 的说法,即这是糟糕的设计,但我认为这可以通过将数组拆分为其各自值的函数与 APPLY 相结合来解决。

这应该会产生一个类似的表格

v1 100

v1 150

等等

v2 50

v2 100

等等

从那里问题应该很容易。

【讨论】:

  • 我知道,但现在为时已晚,我有一个充满数组值的大型数据库,并且数组可以包含 1 到 10 个元素......所以我真的需要一个公式来处理在选择中使用这个...
【解决方案2】:

我会检查这个帖子Split value from one field to two

或者把数据拉回来,用服务端代码把值拆分成一个数组,然后做比较。

【讨论】:

  • 是的,如果我在 select 语句中找不到解决问题的公式,这将是最后的解决方案。但是我的代码会变得太庞大...
猜你喜欢
  • 2012-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多