我正在使用数据库和servlet,这是一个问题。我需要从数据库接收每页6条的数据,为此我提出了这样的请求
SELECT *, COUNT(*) AS 'count'
FROM product
INNER JOIN product_category
on product.product_category_id = product_category.id
INNER JOIN company_manufacturer_product
on product.company_manufacturer_product_id =
company_manufacturer_product.id
GROUP BY 1 LIMIT 6 OFFSET 0;
其中6是每页的最大项目数,0是页数乘以最大商品数。但是通过第二页上的这种实现,我有重复的产品我该如何改进它?
我形成请求的代码部分:
StringBuilder startResponse = new StringBuilder("SELECT *, COUNT(*) AS 'count' FROM product " +
"INNER JOIN product_category on product.product_category_id = product_category.id " +
"INNER JOIN company_manufacturer_product on product.company_manufacturer_product_id=company_manufacturer_product.id");
if (nonNull(form.getProductMax()) && nonNull(form.getPage())) {
startResponse.append(" LIMIT ").append(form.getProductMax()).append(" OFFSET ").append(form.getPage() * form.getProductMax());
}
我的数据库没有LIMIT和OFFSET的响应:
当我使用上述查询时,我的数据库将响应,当我转到商品的第一页时,此请求将发送到数据库:
当我转到商品的第二页时,我将这样的请求发送到数据库
SELECT * , COUNT(*) AS 'count'
FROM product
INNER JOIN product_category
on product.product_category_id = product_category.id
INNER JOIN company_manufacturer_product
on product.company_manufacturer_product_id =
company_manufacturer_product.id
GROUP BY 1 LIMIT 6 OFFSET 6;
我有这样的回应:
我不明白问题是什么。我必须使用COUNT个请求!怎么证明?
答案 0 :(得分:0)
不反对此问题的解决,根据上述方法,在原始sql中添加order by
可以解决此问题。
但是我认为我有更好的分页习惯:使用has_more
,last_product_id
和limit_num
之类的参数将客户端与服务器连接。
has_more
指示服务器中是否有更多数据,无论是否剩余;
last_product_id
表示最后响应数据的ID;
limit_num
表示每页的数量。
因此,客户端可以使用has_more
确定是否发送请求,如果是,则客户端向服务器发送带有last_product_id
和limit_num
的请求;对于服务器,sql可以是这样:
select * from table where id < $last_product_id order by id desc
limit $limit_num + 1; =>$datas
然后,计数($ datas)和$ limit_num来计算has_more
和last_product_id
的值:
$has_more = 0;
$data_num = count($datas);
if ($data_num > $page_limit) {
$has_more = 1;
array_pop($datas);
$data_num--;
}
$last_product_id = end($datas)['id'] ?? 0;
答案 1 :(得分:-1)
SELECT *,COUNT(product.id)作为“ IN”从产品INNER JOIN获得 product.product_category_id = product_category.id上的product_category INNER JOIN公司_制造商_产品介绍 product.company_manufacturer_product_id = company_manufacturer_product.id 按product.id分组,按product.id排序LIMIT 6 OFFSET 0;