我正在处理数据库和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());
}
我的数据库响应没有限制和偏移:
my database respone当我使用上述查询时,当我转到商品的第一页时,此请求将发送到数据库:
当我翻到商品的第二页时,我会向数据库发送这样一个请求
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;
我的React是:
我不明白问题是什么。我必须通过count使用请求!怎么证明?
2条答案
按热度按时间hzbexzde1#
选择*,count(product.id)作为“count”,从product inner join product\u category on product.product\u category\u id=product\u category.id inner join company\u manufacturer\u product.id=company\u manufacturer\u product.id group by product.id order by product.id limit 6 offset 0;
ftf50wuq2#
不反对这个问题的解决,按上述方法,加上
order by
使用原始sql可以解决这个问题。但是我认为我有一个更好的分页实践:使用参数,比如has_more
,last_product_id
以及limit_num
将客户端与服务器连接。has_more
指示服务器中的更多数据是否保留;last_product_id
表示最后一个响应数据的id;limit_num
指示每页的页数。所以,客户可以使用
has_more
要确定是否发送请求,如果是,客户端将发送一个带有last_product_id
以及limit_num
到服务器;对于服务器,sql可以是:并且,count($datas)和$limit_num来计算
has_more
以及last_product_id
: