Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取具有最近匹配编号的列_Php_Mysql - Fatal编程技术网

Php 获取具有最近匹配编号的列

Php 获取具有最近匹配编号的列,php,mysql,Php,Mysql,我有一个数字表,它们是递增的,但不是以某种模式递增的,我们称之为t1表。在另一个表中,t2有另一个数字,可能和t1中的数字相同,也可能不同。我想要的是t1中的数字,也就是t2中第一个较小的数字。例如,如果t1中有数字6000、7000和8000,t2中的数字是7999,则会得到数字为7000的列。有一种方法: 将数字从t2连接到表t1 将每行与数字进行比较 按比较排序,选择第一行 实施: select t1.* from t1 inner join t2 on t1.column < t2

我有一个数字表,它们是递增的,但不是以某种模式递增的,我们称之为t1表。在另一个表中,t2有另一个数字,可能和t1中的数字相同,也可能不同。我想要的是t1中的数字,也就是t2中第一个较小的数字。例如,如果t1中有数字6000、7000和8000,t2中的数字是7999,则会得到数字为7000的列。

有一种方法:

将数字从t2连接到表t1 将每行与数字进行比较 按比较排序,选择第一行 实施:

select t1.*
from t1
inner join t2 on t1.column < t2.number
order by t2.number - t1.column asc
limit 1

注意:我不知道t2中有多少行,所以我在t1.column我希望我正确理解了这一点。如果您想从表中获取最大的数字,该表在本例中仍然小于或等于其他数字7999,您可以执行以下操作:

SELECT number FROM numbers WHERE number <= 7999 ORDER BY number DESC LIMIT 1

第1步确定犹太人区的行号

步骤2:将表连接到下一个最高的行号上

步骤3:找出数字和t2中下一个最高数字之间的数字

第四步享受另一个美好的星期一

with temp as (
SELECT  number
        @curRow := @curRow + 1 AS row_number
FROM    t1 l
JOIN    (SELECT @curRow := 0) r
order by number
)

with temp2 as (
select o.number,
      case when n.number is null
          100000000
      else
         n.number
      end higherNum
from temp o
left join temp n on o.row_number = n.row_number+1
)

select *
from temp2 o
inner join t2 n on n.number between o.number and o.higherNum

我不认为ABS在这种情况下是正确的,因为他想要的是第一个较小的数字。我已经这样做了,而且效果很好,但这并不完全是我想要的。谢谢