0

私はこのJavaコードを持っています:

ArrayList<MessageMap> ids = getNewMail(UserID, type, maxIdMessage);
Message[] message = new Message[ids.size()];
if(ids.size()>0){
   ResultSet rs;
   int j =0;
   for(MappaMessaggi i : ids){
      pstmt = conn.prepareStatement("SELECT * FROM Messaggi WHERE MessageID = ?");
      pstmt.setInt(1, i.getMessageID());
      rs = pstmt.executeQuery();
      rs.next();
      .
      .
      .
   }

どこにgetNewMailある:

public synchronized ArrayList<MessageMap> getNewMail(int UserID,int type,int max){
   ArrayList<MessageMap> map = new ArrayList<MessageMap>();
   try {
      pstmt = conn.prepareStatement("SELECT * FROM MessageMap WHERE UserID = ? AND TipoID = ? AND MessageID > ?");
      .
      .//fill arraylist with resultSet 
      .
}

たった1つのクエリで同じことができることは知っていますが、方法がわかりません..誰かが私の目を開けてくれますか? :) ありがとう!!!

編集:私は試します:

SELECT i.*
FROM Messaggi AS i
INNER JOIN MessageMap AS p i.MessageID = p.MessageID
WHERE p.MessageID = 1 AND p.UserID = 1 AND p.TipoID = 2

しかし、私は取得します:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'i.MessageID = p.MessageID WHERE p.MessageID = 1 AND p.UserID = 1 AND p.TipoID = ' at line 3
4

2 に答える 2

1

あなたの質問とクエリに基づいて、私が見つけた簡単な解決策はこのクエリである可能性があります(テーブルに関連する別の列があるかもしれません)

SELECT A.*
FROM MessageMap A
    INNER JOIN Message B on A.MessageId = B.MessageId
WHERE
    A.UserId = ?
    AND A.TipoID = ?
    AND A.MessageId = ?

また、これら 3 つのパラメータが必要かどうか、またはそれらのいずれも送信できなかったかを指定してください。

于 2012-06-28T15:08:05.337 に答える
1

これを試して:

SELECT i.*, p.*
FROM Messaggi i
INNER JOIN MessageMap p ON i.MessageID = p.MessageID
WHERE i.MessageID = ? AND p.UserID = ? AND p.TipoID = ?
于 2012-06-28T15:09:08.000 に答える