是否有一种不那么蛮力的方法来完成这样的事情:

SELECT
    COUNT(b.id),
    COUNT(
       IF(
          phone = '1111111111'
          OR phone = '22222222222'
          ....
          OR phone = '9999999999', 1, NULL))
FROM table
WHERE created >= DATE_SUB(NOW(), INTERVAL 90 DAY);


更新
理想情况下,我实际上能够检测到以下任何情况:


4444
4444444444
1111111111
9999999999
99999


因此,在同一字段中重复相同数字至少4次的任何实例。

最佳答案

de ja vu?也许去年有人问过这个问题。

SUM(RLIKE '0{4}|1{4}|2{4}|3{4}|4{4}|5{4}|6{4}|7{4}|8{4}|9{4}')


将计算多少位数重复4次或更多次。 (请注意,使用SUM代替COUNT。这是可行的,因为RLIKE将返回1表示true或0表示false。)

例:

mysql> SELECT '88888822222' RLIKE '0{4}|1{4}|2{4}|3{4}|4{4}|5{4}|6{4}|7{4}|8{4}|9{4}';
+-------------------------------------------------------------------------+
| '88888822222' RLIKE '0{4}|1{4}|2{4}|3{4}|4{4}|5{4}|6{4}|7{4}|8{4}|9{4}' |
+-------------------------------------------------------------------------+
|                                                                       1 |
+-------------------------------------------------------------------------+

09-12 11:33