如何检查事件是否与更新中的其他事件重叠?

时间:2016-02-20 14:20:39

标签: android database sqlite events sql-update

我创建了活动。我想检查事件是否重叠。为此我在数据库中有一个函数来检查事件是否重叠。我已经保存了日期和日期。

但是对于更新,如果我想延长我的活动时间,它会显示事件存在。如何通过检查当前事件是否与另一个事件重叠来更新事件?

功能:

<?
session_start();
$authenticated = ( isset($_SESSION["authenticated"]) ? true : false );
$post_data = json_encode(array(authenticated => $authenticated));
echo $post_data;
?>

创建表格:

  boolean doesEventOverlap(String startTime, String endTime, String day) {
    String selectQuery = "SELECT COUNT(*) FROM " + TABLE + " WHERE " + KEY_DAY_OF_WEEK + " = '" + day + "'" + " AND "

            + "(" + KEY_FROM_DATE + " < '" + startTime
            + "' AND '" + startTime + "' < " + KEY_TO_DATE + ") OR "

            + " (" + KEY_FROM_DATE + " < '" + endTime
            + "' AND '" + endTime + "' < " + KEY_TO_DATE + ") OR "

            + " (" + KEY_FROM_DATE + " < '" + startTime
            + "' AND '" + endTime + "' < " + KEY_TO_DATE + ") OR "

            + " ('" + startTime + "' < " + KEY_FROM_DATE
            + " AND " + KEY_TO_DATE + " < '" + endTime + "')";


    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    if (cursor.moveToFirst()) {
        do {
            EventData event = new EventData();
            return cursor.getInt(0) > 0;
        } while (cursor.moveToNext());
    }
    return false;
}

谢谢。

1 个答案:

答案 0 :(得分:0)

好的,这是我将使用的代码以及我建议的更改

1)重构您的代码以使用$ value AND $ Value

之间的关键字

2)除非我误解了你想要达到的目的,否则你只需要看看开始时间是在任何事件之间还是在结束时间之间。

3)我更改了select语句,以便获得对重叠事件的所有id的引用。 (你的陈述不需要做一个while循环,因为Select count语句只有一行!)

4)添加一个;出于安全原因,在声明的最后

boolean doesEventOverlap(String startTime, String endTime, String day) {
String selectQuery = "SELECT "+ KEY_ID +" FROM " + TABLE + 
" WHERE " + KEY_DAY_OF_WEEK + " = '" + day + "'" +
" AND "
+ "('" + startTime + "'  BETWEEN "+ KEY_FROM_DATE + " AND " +KEY_TO_DATE+")
OR
('" + endTime + "'  BETWEEN "+ KEY_FROM_DATE + " AND " +KEY_TO_DATE+");";


  SQLiteDatabase db = this.getWritableDatabase();
  Cursor cursor = db.rawQuery(selectQuery, null);
  if (cursor.moveToFirst()) {
    do {
        EventData event = new EventData();

    } while (cursor.moveToNext());
    return cursor.getCount() > 0;
  }
return false
}

至于更新当前事件的时间我将运行此函数以查看它是否重叠,然后如果它返回false,我会发现数据库中的下一个起始点大于当前事件的下面的sql

"SELECT '"+ KEY_FROM_DATE + "' FROM "+TABLE+" WHERE '"+ KEY_FROM_DATE + "'> "+endtime+";"

如果您接着从光标获得的值 - 您的结束时间 - 1秒是您可以延长事件的数量。我希望这有帮助