我创建了活动。我想检查事件是否重叠。为此我在数据库中有一个函数来检查事件是否重叠。我已经保存了日期和日期。
但是对于更新,如果我想延长我的活动时间,它会显示事件存在。如何通过检查当前事件是否与另一个事件重叠来更新事件?
功能:
<?
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;
}
谢谢。
答案 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秒是您可以延长事件的数量。我希望这有帮助