1

Android でカーソルを使用して特定の行を取得する際に問題が発生しています。これが私のセットアップです。1 つのテーブル (~38000) (ジオロケーション) に複数の行があり、もう 1 つのテーブル (可用性) には約 300 行あります。

位置情報は次のようになります: _ID LATSTART LONSTART LATEND LONEND 在庫状況は次のようになります: ID MONTH_START MONTH_END DAY_START DAY_END PROHIBITTED_START PROHIBITTED_END PAID_START PAID_END

ジオロケーション ストアの開始ジオポイントと終了ジオポイント、可用性ストアの時間範囲 これらには 1 対多の関係があります

プログラムは、線の位置と時間に基づいて異なる色の線を描画します。私の問題は、3 つの異なるクエリ (禁止、無料、有料) を実行していて、それぞれが重複していることです。

禁止された行のクエリは次のとおりです

            prohibQuery = "SELECT * " + 
                      "FROM " +
                           "AVAILABILITY AS A JOIN (      SELECT * " +
                            "FROM GEOLOCATION " +
                            "WHERE ABS(LATSTART - (?) + LONSTART - (?)) < 2.3E-4 " +
                       "OR ABS(LATEND - (?) + LONEND - (?)) < 2.3E-4) AS G ON A.GEO_ID = G._ID " +
                      "WHERE (?) BETWEEN A.MONTH_START AND A.MONTH_END AND (?) BETWEEN A.DAY_START AND A.DAY_END " +
                        "AND A.PROHIB_START <= (?) AND A.PROHIB_END > (?) ";

「フリー」行のコードは次のとおりです。問題は、色が重なっている同じ正確な場所に2つの線があるため、緑や赤ではなく、(アーティストではない)コンボになります。

            Cursor mCursor = sqliteDb
            .rawQuery(
                    "SELECT * "
                            + "FROM GEOLOCATION, " +
                            prohibQuery +
                            "AS PROHIB "
                            + "JOIN AVAILABILITY ON GEOLOCATION._ID=AVAILABILITY.GEO_ID "
                            + "WHERE "
                            + "((abs(LATSTART - (?)) + abs(LONSTART - (?))<2.3E-3) OR (abs(LATEND - (?)) + abs(LONEND - (?))<2.3E-3)) AND "
                            + "((?) BETWEEN MONTH_START AND MONTH_END) AND ((?) BETWEEN DAY_START AND DAY_END) AND "
                            + "((?)<PROHIB_START OR PROHIB_END<=(?)) GROUP BY GEO_ID "
                            + "AND GEOLOCATION._ID <> PROHIB.ID"

ところで、ここに含めなかった変数は現在の値 (例: 場所、月、日、時間) です。いくつかの行の例を次に示します。

行は ON GEOLOCATION._ID=AVAILABILITY.GEO_ID で関連付けられています。

_ID     NAME    LATSTART      LONSTART      LATEND        LONEND
2691    Alpine  45.477741   -73.655335  45.4763953  -73.6522115
2692    Alpine  45.4748043  -73.6486557 45.4762943  -73.652106
2693    Alpine  45.4744849  -73.6478719 45.4748043  -73.6486557
2694    Alpine  45.4741615  -73.6471631 45.4744849  -73.6478719
2695    Alpine  45.4738386  -73.6464376 45.4741615  -73.6471631
2696    Alpine  45.4743872  -73.6459077 45.4738386  -73.6464376
2697    Alpine  45.4743945  -73.645721  45.4743872  -73.6459077
2698    Alpine  45.4738146  -73.6444395 45.4743945  -73.645721


ID       START   END    START END PROHIBSTART END PAIDSTART END GEO_ID
-38146  0   11  1   7   3   6   0   0   2691
-38155  0   11  1   7   9   17  0   0   2691
-38147  0   11  1   7   3   6   0   0   2692
-38148  0   11  1   7   3   6   0   0   2693
-38149  0   11  1   7   3   6   0   0   2694
-38150  0   11  1   7   3   6   0   0   2695
-38151  0   11  1   7   3   6   0   0   2696
-38156  0   11  1   7   0   24  0   0   2697
-38153  0   11  1   7   0   24  0   0   2698
-38154  0   11  1   7   0   24  0   0   2699
4

0 に答える 0