根据row_count在SQL中使用Limit

时间:2018-12-25 08:00:04

标签: php mysql sql phpmyadmin

我想获取具有20的最大倍数的行数,例如,如果我的表有148行,则限制应为140,而最新的8个条目紧随其后;如果我的表有170行,则限制为160。在这种情况下查询将是什么。

SELECT * 
FROM tbl_abc t
WHERE
    t.id = '1' AND
    EXISTS (SELECT 1 FROM department WHERE id = '101' AND owner = t.owner_department);

2 个答案:

答案 0 :(得分:1)

据我所知,LIMIT之后必须是整数文字。 LIMIT甚至不需要6/2之类的东西,其结果将为整数文字。我建议只读取整个表,然后仅处理PHP中需要多少行。

$row_cnt = $result->num_rows;
$rs_size = $row_cnt - ($row_cnt % 20);

while ($rs_size > 0 && $row = mysqli_fetch_assoc($result)) {
    // process a row
    --$rs_size;
}

上面的while循环应在读取最大20的倍数后退出。这种方法并不太浪费,因为最多您将从MySQL中读取19条额外的行,而这些行最终将不使用。

答案 1 :(得分:0)

您可以为此使用变量:

select t.*
from (select t.*, (@rn := @rn + 1) as rn
      from t cross join
           (select @rn := 0) params
      order by ?
     ) t
where rn <= floor(rn / 20) * 20;

?用于指定顺序的列,大概类似于id asc

在MySQL 8+中,您将使用窗口函数:

select t.*
from (select t.*,
             row_number() over (order by ?) as seqnum,
             count(*) over () as cnt
      from t
     ) t
where seqnum <= floor(cnt / 20) * 20;