0

MySqlクエリに関して1つのヘルプが必要です。

私のテーブルはこんな感じ

_id studid  recid   arrival
834 29     436      12:04
835 29     437      12:19
836 29     438      12:35
837 29     439      12:43

次に、とのIDを比較する必要がありrecid 436ますrecid 439

まさにこのように

  _id(recid(436)) < _id(recid(439)) // 834 < 837 (true)

これについてはクエリが必要です。

私はこのように試しました。

public boolean Check(String tid,String src,String dest)
{
    Cursor c1 = this.db.query(TABLE_NAME_2, new String[] { "_id" },
            "_studId = \"" + src +"\"  AND _recId = \"" + tid+"\"" , null, null, null, null);

    Cursor c2 = this.db.query(TABLE_NAME_2, new String[] { "_id" },
            "_studId = \"" + dest +"\"  AND _recId = \"" + tid+"\"" , null, null, null, null);
    int srcid = 0;
    int destid = 0;

    if (c1.moveToFirst()) 
    {
          do {
              srcid = Integer.parseInt(c1.getString(0));
           } while (c1.moveToNext());
    }
    if (c1 != null && !c1.isClosed()) {
         c1.close();
    }
    if (c2.moveToFirst()) 
    {
        do {
            destid = Integer.parseInt(c2.getString(0));
        } while (c2.moveToNext());
    }
    if (c2 != null && !c2.isClosed()) {
        c1.close();
    }   
    if(srcid < destid)
    {
        return true;
    }
    else
    {
        return false;
    }
}

このようにチェックすると正しい結果が返されます

 System.out.println(dh.Check("29", "436", "439")); // returns true.

しかし、複数のレコードがあるので、正しい手順ではないと思います。したがって、50のレコードがある場合、この関数を50回実行する必要があります。だから私はこれのための簡単なクエリが必要です。

誰かがこのような経験をしているなら。お願い助けて..

前もって感謝します。

4

1 に答える 1

1

0 または 1 を返す次のようなクエリを使用できます。

SELECT (SELECT _id FROM MyTable WHERE recid = 436) <
       (SELECT _id FROM MyTable WHERE recid = 439)

繰り返し実行をより効率的にするには、さまざまなパラメーターで複数回実行できるコンパイル済みのステートメントを使用します。

SQLiteStatement stmt = db.compileStatement(
    "SELECT (SELECT _id FROM MyTable WHERE studid = ? AND recid = ?) < "+
           "(SELECT _id FROM MyTable WHERE studid = ? AND recid = ?)");
...
int recid_src = 436;
int recid_dst = 439;
int studid = 29;
stmt.bindLong(1, studid);
stmt.bindLong(2, recid_src);
stmt.bindLong(3, studid);
stmt.bindLong(4, recid_dst);
boolean result = stmt.simpleQueryForLong() != 0;
于 2013-01-24T11:21:10.940 に答える