如何在逗号分隔数组中找到两个数字之间的差异?

时间:2016-08-25 10:21:01

标签: php mysql

假设我有一个MySQL表,它有两行和两列。

Column 1 = ID
Column 2 = NUMBERS
第一行中的

NUMBERS字段&第二行有以下逗号分隔值:

NUMBERS(Row 1) = 1,2,3,4,5,6,7,8
NUMBERS(Row 2) = 6,7,8,9,10,11

现在我需要找到介于1和1之间的所有数字。 11.我尝试过MYSQL BETWEEN函数,但它没有返回所需的结果。

有没有办法让我得到理想的结果?

1 个答案:

答案 0 :(得分:0)

有一个包含序列号的表,如

sequence_numbers

number
     1
     2
    ..
   100

您可以使用JOIN和FIND_IN_SET()函数从列表中提取数字:

select t.ID, s.number
from mytable t
join sequence_numbers s
  on find_in_set(s.number, t.NUMBERS)

结果:

| ID | number |
|----|--------|
|  1 |      1 |
|  1 |      2 |
|  1 |      3 |
|  1 |      4 |
|  1 |      5 |
|  1 |      6 |
|  2 |      6 |
|  1 |      7 |
|  2 |      7 |
|  1 |      8 |
|  2 |      8 |
|  2 |      9 |
|  2 |     10 |
|  2 |     11 |

http://sqlfiddle.com/#!9/b4144/4

现在很多任务都很简单。

限制在3到7之间的数字:

select t.ID, s.number
from mytable t
join sequence_numbers s 
  on find_in_set(s.number, t.NUMBERS)
where s.number between 3 and 7

结果:

| ID | number |
|----|--------|
|  1 |      3 |
|  1 |      4 |
|  1 |      5 |
|  1 |      6 |
|  2 |      6 |
|  1 |      7 |
|  2 |      7 |

http://sqlfiddle.com/#!9/b4144/3

创建大型序列表的一种简单方法是使用内部columns表(或任何具有足够行的表)将其与自身连接起来:

create table sequence_numbers (number int auto_increment primary key)
  select null as number
  from information_schema.columns c1
  cross join information_schema.columns c2
  limit 1000000
;

http://sqlfiddle.com/#!9/7cc0a/2

相关问题