高效匹配最高类别

Efficiently match highest category

我有一个 table 的 6 位数字,范围为 0-9,我会将其与 6 个类别中的数字进行匹配

但只应选择最高类别。一个例子

人数:123456

我为它创建了一个 fiddle https://www.db-fiddle.com/f/TZCrFPnJpkw4fyxA5Q6mR/1

什么是有效的方法?蛮力解决方案将是一个双循环,我想从 6 场比赛开始,5 场比赛,...

你可以这样做:

select *
from (
  select 6 as score, b.* from bids b where ticketNumber like '123456%'
  union all select 5, b.* from bids b where ticketNumber like '12345%'
  union all select 4, b.* from bids b where ticketNumber like '1234%'
  union all select 3, b.* from bids b where ticketNumber like '123%'
  union all select 2, b.* from bids b where ticketNumber like '12%'
  union all select 1, b.* from bids b where ticketNumber like '1%'
) x
order by score desc
limit 1

结果:

 score  id  roundId  address  ticketNumber 
 ------ --- -------- -------- ------------ 
 6      1   1        12345    123456       

参见 DB Fiddle 中的示例。

或者,您可以使用递归 CTE,但这在 MySQL 5.7 中不可用(正如您的 fiddle 暗示的那样)。

SELECT @number tested_number, 7 - LENGTH(nums.num) common_digits, bids.*
FROM bids
JOIN (SELECT 1 num UNION 
      SELECT 10 UNION 
      SELECT 100 UNION 
      SELECT 1000 UNION 
      SELECT 10000 UNION 
      SELECT 100000) nums
WHERE @number DIV nums.num = bids.ticketNumber DIV nums.num
ORDER BY nums.num LIMIT 1;

https://www.db-fiddle.com/f/TZCrFPnJpkw4fyxA5Q6mR/4