使用多个 mysql table 并在一个 html table 中显示
Use multiple mysql tables and display in one html table
我试图通过加入我的 user2
table 和 orders
将订单数量添加到 html table 的最后一列table 使用 sql 语句(我在 "user" 主键中创建 userID
并在 orders
外键中创建 userID
)并使用 setAttribute
在我的 Servlet class 中,以便在我的 jsp 文件中使用 EL。这是我现在在我的 Servlet class,
中的代码
ps = conn
.prepareStatement("select * FROM user2 WHERE lastname LIKE '%"
+ searchReq + "%'");
rs = ps.executeQuery();
while (rs.next()) {
user = new User(rs.getInt("userID"), rs.getString("username"),
rs.getString("password"), rs.getString("firstname"),
rs.getString("lastname"), rs.getString("Email"),
rs.getInt("age"));
listOfUsers.add(user);
在我的 jsp:
<table border="1" class="search-table">
<tr>
<td>ID</td>
<td>Username</td>
<td>Password</td>
<td>First Name</td>
<td>Last Name</td>
<td>Email</td>
<td>Age</td>
<td>Orders</td>
</tr>
<c:forEach items="${requestScope.lou}" var="current">
<tr>
<td><c:out value="${current.id}" /></td>
<td><c:out value="${current.username}" /></td>
<td><c:out value="${current.password}" /></td>
<td><c:out value="${current.firstname}" /></td>
<td><c:out value="${current.lastname}" /></td>
<td><c:out value="${current.email}" /></td>
<td><c:out value="${current.age}" /></td>
<td><c:out value="${orders}" /></td>
</tr>
</c:forEach>
</table>
我的订单 table 有 userID、orderID、Shipping 和 item 作为列,我使用每个 userID 的 orderID 来计算订单数。
我只是不确定如何获取进入我的 html table 中每一行的订单数量,因为当我在 "select * FROM user2...etc" 语句中使用子查询时,它 returns 不止一行(应该如此),但我不确定如何处理多行。或者有不同的方法来处理这个问题吗?
看来你需要学习SQL。
要将订单计数作为查询结果的额外列,请使用子选择,例如
SELECT userID
, username
, password
, firstname
, lastname
, Email
, age
, ( SELECT COUNT(*)
FROM orders o
WHERE o.userID = u.userID
) AS orders
FROM user2 u
WHERE lastname LIKE ?
那个SQL也用了一个参数marker(?
),你通过调用PreparedStatement
.[=15的setString()
来指定marker的值=]
你不是使用字符串连接,除非你想让黑客使用SQL Injection窃取你的数据and/or删除你的表。
以防万一有人想知道我在上面收到的帮助下做了什么,(我是初学者,所以这绝对不是最佳答案或其他任何东西,它只适用于我想做的事情)
ps = conn
.prepareStatement("SELECT userID, username, password, firstname, lastname, email, age, ( SELECT COUNT(*) FROM orders o WHERE o.userID = u.userID) AS orders FROM user2 u WHERE lastname LIKE ? ");
ps.setString(1, "%" + searchReq + "%");
rs = ps.executeQuery();
while (rs.next()) {
user = new User(rs.getInt("userID"), rs.getString("username"),
rs.getString("password"), rs.getString("firstname"),
rs.getString("lastname"), rs.getString("Email"),
rs.getInt("age"));
listOfUsers.add(user);
order = rs.getInt("orders");
user.setOrders(order);
然后接近我的 doPost 方法的末尾 request.setAttribute("orders", order);
在我的 jsp 中:
<c:forEach items="${requestScope.lou}" var="current">
<tr>
<td><c:out value="${current.id}" /></td>
<td><c:out value="${current.username}" /></td>
<td><c:out value="${current.password}" /></td>
<td><c:out value="${current.firstname}" /></td>
<td><c:out value="${current.lastname}" /></td>
<td><c:out value="${current.email}" /></td>
<td><c:out value="${current.age}" /></td>
<td><c:out value="${current.orders}" /></td>
</tr>
</c:forEach>
并为用户 class 中的订单创建了 setter 和 getter。
我试图通过加入我的 user2
table 和 orders
将订单数量添加到 html table 的最后一列table 使用 sql 语句(我在 "user" 主键中创建 userID
并在 orders
外键中创建 userID
)并使用 setAttribute
在我的 Servlet class 中,以便在我的 jsp 文件中使用 EL。这是我现在在我的 Servlet class,
ps = conn
.prepareStatement("select * FROM user2 WHERE lastname LIKE '%"
+ searchReq + "%'");
rs = ps.executeQuery();
while (rs.next()) {
user = new User(rs.getInt("userID"), rs.getString("username"),
rs.getString("password"), rs.getString("firstname"),
rs.getString("lastname"), rs.getString("Email"),
rs.getInt("age"));
listOfUsers.add(user);
在我的 jsp:
<table border="1" class="search-table">
<tr>
<td>ID</td>
<td>Username</td>
<td>Password</td>
<td>First Name</td>
<td>Last Name</td>
<td>Email</td>
<td>Age</td>
<td>Orders</td>
</tr>
<c:forEach items="${requestScope.lou}" var="current">
<tr>
<td><c:out value="${current.id}" /></td>
<td><c:out value="${current.username}" /></td>
<td><c:out value="${current.password}" /></td>
<td><c:out value="${current.firstname}" /></td>
<td><c:out value="${current.lastname}" /></td>
<td><c:out value="${current.email}" /></td>
<td><c:out value="${current.age}" /></td>
<td><c:out value="${orders}" /></td>
</tr>
</c:forEach>
</table>
我的订单 table 有 userID、orderID、Shipping 和 item 作为列,我使用每个 userID 的 orderID 来计算订单数。
我只是不确定如何获取进入我的 html table 中每一行的订单数量,因为当我在 "select * FROM user2...etc" 语句中使用子查询时,它 returns 不止一行(应该如此),但我不确定如何处理多行。或者有不同的方法来处理这个问题吗?
看来你需要学习SQL。
要将订单计数作为查询结果的额外列,请使用子选择,例如
SELECT userID
, username
, password
, firstname
, lastname
, Email
, age
, ( SELECT COUNT(*)
FROM orders o
WHERE o.userID = u.userID
) AS orders
FROM user2 u
WHERE lastname LIKE ?
那个SQL也用了一个参数marker(?
),你通过调用PreparedStatement
.[=15的setString()
来指定marker的值=]
你不是使用字符串连接,除非你想让黑客使用SQL Injection窃取你的数据and/or删除你的表。
以防万一有人想知道我在上面收到的帮助下做了什么,(我是初学者,所以这绝对不是最佳答案或其他任何东西,它只适用于我想做的事情)
ps = conn
.prepareStatement("SELECT userID, username, password, firstname, lastname, email, age, ( SELECT COUNT(*) FROM orders o WHERE o.userID = u.userID) AS orders FROM user2 u WHERE lastname LIKE ? ");
ps.setString(1, "%" + searchReq + "%");
rs = ps.executeQuery();
while (rs.next()) {
user = new User(rs.getInt("userID"), rs.getString("username"),
rs.getString("password"), rs.getString("firstname"),
rs.getString("lastname"), rs.getString("Email"),
rs.getInt("age"));
listOfUsers.add(user);
order = rs.getInt("orders");
user.setOrders(order);
然后接近我的 doPost 方法的末尾 request.setAttribute("orders", order);
在我的 jsp 中:
<c:forEach items="${requestScope.lou}" var="current">
<tr>
<td><c:out value="${current.id}" /></td>
<td><c:out value="${current.username}" /></td>
<td><c:out value="${current.password}" /></td>
<td><c:out value="${current.firstname}" /></td>
<td><c:out value="${current.lastname}" /></td>
<td><c:out value="${current.email}" /></td>
<td><c:out value="${current.age}" /></td>
<td><c:out value="${current.orders}" /></td>
</tr>
</c:forEach>
并为用户 class 中的订单创建了 setter 和 getter。