2016-07-14 9 views
-1

私はuser2テーブルとordersテーブルをSQLステートメント(私はuserIDを作成しました)に参加させることで、htmlテーブルの最後のカラムに注文数を追加しようとしています。私のJSPファイルにELを使用するには、サーブレットクラスにsetAttributeを使用してください。はordersの外部キーです。これは私が私のサーブレットクラスで、今持っているコード、複数のmysqlテーブルを使用して1つのhtmlテーブルに表示

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> 

私の注文表は列として、ユーザーID、のorderID、送料、およびアイテムを持っている、と私は数えますユーザーIDごとの注文IDを使用して注文の数。

"select * FROM user2 ... etc"ステートメントでサブクエリを使用すると、複数の行が返されるので、htmlテーブルの各行に入る順序を取得する方法は不明です。 (それをする必要があります)が、私はどのように複数の行を処理するか分からない。または、これを処理する別の方法がありますか?

+1

これらの2つのテーブルを一緒に1つにまとめる必要があります。 – duffymo

答えて

1

は、を学ぶ必要があります。

クエリ結果の余分な列として注文数を取得するには、サブセレクションを使用します。 SQLは、パラメータ・マーカ(?)を使用し、あなたがPreparedStatementsetString()を呼び出すことにより、マーカーの値を指定することを

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 Injectionを使用しない限り、は、文字列の連結を使用して、それをしないでください。

+0

助けてくれてありがとう! – episkeyyy

+0

私はちょうどhtmlテーブルにそれを取得するのに困っています。 – episkeyyy

0

私が上で受けた助けを借りて私が何をしたのか知りたがっている人のために(私は初心者ですので、最善の答えではありません)

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メソッドの私のjspでrequest.setAttribute("orders", order);

の終わり近く:

<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> 

とUserクラスでの受注のためのセッターとゲッターを作りました。

関連する問題