如何在客户端获取 sql 列值的总和?
How to get sum of sql column value client-side?
服务器端我有这个 table 叫做 product
:
id | prod_name | prod_price | description | points
如上所示,每个产品都有积分值,有点像星巴克,你买的每杯咖啡都会给你一张贴纸,一旦你完成一张卡片,你就会得到免费的咖啡。我对我的商店使用相同的概念。
购买的每件产品都会给用户积分。当然,积分的价值取决于价格。越高越好。
我如何根据他在 basket/cart 中放置的产品向他显示他所累积的总积分?每次他往篮子里放一个产品,总和就需要动态升级。我更喜欢 JSTL
或 SQL
作为最小化 JS
数量的解决方案,但我对后者相当开放。
所以这是 basket.jsp:
<div class="pointsContainer">
My Reward Points: ( <c:out value="${points + points}" /> )
</div>
<div class='block'>
<c:if test="${!empty basket && basket.numberOfItems != 0}">
<h3 class='boardRowHeader'>My Products</h3>
</c:if>
<c:forEach var="basketItem" items="${basket.items}" varStatus="iter">
<c:set var="product" value="${basketItem.product}"/>
<div class="cart_row">
<div class="cart_img"><a href="viewProduct?${product.id}">
<img class="image" alt="" src="${initParam.productGalleryImagePath}${product.id} (1).jpg" />
</div>
<div class="cart_nme"><a class="category_links" href="viewProduct?${product.id}">${product.name}</a></div>
<div class="cart_price">$${product.price}</div>
<div class="cart_update">
${product.points} points
</div>
</div>
</c:forEach>
</div>
您可以像这样在 for 循环中使用计数器变量:
<div class="pointsContainer">
My Reward Points: ( <c:out value="${points + points}" /> )
</div>
<div class='block'>
<c:if test="${!empty basket && basket.numberOfItems != 0}">
<h3 class='boardRowHeader'>My Products</h3>
</c:if>
<c:forEach var="basketItem" items="${basket.items}" varStatus="iter">
<c:set var="totalPoints" value="0"/>
<c:set var="product" value="${basketItem.product}"/>
<div class="cart_row">
<div class="cart_img"><a href="viewProduct?${product.id}">
<img class="image" alt="" src="${initParam.productGalleryImagePath}${product.id} (1).jpg" />
</div>
<div class="cart_nme"><a class="category_links" href="viewProduct?${product.id}">${product.name}</a></div>
<div class="cart_price">$${product.price}</div>
<div class="cart_update">
${product.points} points
</div>
</div>
<c:set var="totalPoints" value=" ${totalPoints + product.points}"/>
</c:forEach>
</div>
<div class="totalPoints">
Total Points: <c:out value="${totalPoints}" />
</div>
如果您已经在使用 Java EE 7 / Servlet 3.1 / EL 3.0(Tomcat 8、WildFly 8、GlassFish 4 等),那么只需使用 Stream operations and Lambda EL。这也适用于 Java 6/7,本身不需要 Java 8.
例如
<c:forEach items="${basket.items}" var="basketItem">
<c:set var="product" value="${basketItem.product}"/>
<div class="cart_row">
<div class="cart_update">${product.points} points</div>
</div>
</c:forEach>
<div class="totalPoints">
Total Points: ${basket.items.stream().map(item -> item.product.points).sum()}
</div>
服务器端我有这个 table 叫做 product
:
id | prod_name | prod_price | description | points
如上所示,每个产品都有积分值,有点像星巴克,你买的每杯咖啡都会给你一张贴纸,一旦你完成一张卡片,你就会得到免费的咖啡。我对我的商店使用相同的概念。
购买的每件产品都会给用户积分。当然,积分的价值取决于价格。越高越好。
我如何根据他在 basket/cart 中放置的产品向他显示他所累积的总积分?每次他往篮子里放一个产品,总和就需要动态升级。我更喜欢 JSTL
或 SQL
作为最小化 JS
数量的解决方案,但我对后者相当开放。
所以这是 basket.jsp:
<div class="pointsContainer">
My Reward Points: ( <c:out value="${points + points}" /> )
</div>
<div class='block'>
<c:if test="${!empty basket && basket.numberOfItems != 0}">
<h3 class='boardRowHeader'>My Products</h3>
</c:if>
<c:forEach var="basketItem" items="${basket.items}" varStatus="iter">
<c:set var="product" value="${basketItem.product}"/>
<div class="cart_row">
<div class="cart_img"><a href="viewProduct?${product.id}">
<img class="image" alt="" src="${initParam.productGalleryImagePath}${product.id} (1).jpg" />
</div>
<div class="cart_nme"><a class="category_links" href="viewProduct?${product.id}">${product.name}</a></div>
<div class="cart_price">$${product.price}</div>
<div class="cart_update">
${product.points} points
</div>
</div>
</c:forEach>
</div>
您可以像这样在 for 循环中使用计数器变量:
<div class="pointsContainer">
My Reward Points: ( <c:out value="${points + points}" /> )
</div>
<div class='block'>
<c:if test="${!empty basket && basket.numberOfItems != 0}">
<h3 class='boardRowHeader'>My Products</h3>
</c:if>
<c:forEach var="basketItem" items="${basket.items}" varStatus="iter">
<c:set var="totalPoints" value="0"/>
<c:set var="product" value="${basketItem.product}"/>
<div class="cart_row">
<div class="cart_img"><a href="viewProduct?${product.id}">
<img class="image" alt="" src="${initParam.productGalleryImagePath}${product.id} (1).jpg" />
</div>
<div class="cart_nme"><a class="category_links" href="viewProduct?${product.id}">${product.name}</a></div>
<div class="cart_price">$${product.price}</div>
<div class="cart_update">
${product.points} points
</div>
</div>
<c:set var="totalPoints" value=" ${totalPoints + product.points}"/>
</c:forEach>
</div>
<div class="totalPoints">
Total Points: <c:out value="${totalPoints}" />
</div>
如果您已经在使用 Java EE 7 / Servlet 3.1 / EL 3.0(Tomcat 8、WildFly 8、GlassFish 4 等),那么只需使用 Stream operations and Lambda EL。这也适用于 Java 6/7,本身不需要 Java 8.
例如
<c:forEach items="${basket.items}" var="basketItem">
<c:set var="product" value="${basketItem.product}"/>
<div class="cart_row">
<div class="cart_update">${product.points} points</div>
</div>
</c:forEach>
<div class="totalPoints">
Total Points: ${basket.items.stream().map(item -> item.product.points).sum()}
</div>