我想获取具有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);
答案 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;