为游标取以下where子句:
whereClause = DBHelper.SCHEDULE_DAY + " = '" + dayOfTheWeek + "' AND "
+ DBHelper.SCHEDULE_STARTTIME + " = (SELECT " + DBHelper.SCHEDULE_STARTTIME
+ " FROM " + DBHelper.TABLE_SCHEDULE + " WHERE " + DBHelper.SCHEDULE_DAY
+ " = '" + dayOfTheWeek + "' AND " + DBHelper.SCHEDULE_STARTTIME + " < "
+ (currenttime - 100) + " ORDER BY "
+ DBHelper.SCHEDULE_STARTTIME + " DESC LIMIT 1)";用SQL语法编写的是:。
从进度表中选择className,其中day =“星期二”,startTime =(从日程中选择startTime,其中日期=“星期二”,startTime < 1200顺序,按startTime DESC限制1);
它是否可能存在于嵌套参数的解析查询中?使用LocalData存储功能,我希望删除SQLite数据库以支持LocalDatastore,因为我已经将它用于临时缓存。也许我考虑过了从SQLite到Parse的翻译,但这是我到目前为止想出的:
ParseQuery<ParseObject> query = ParseQuery.getQuery("classes");
query.whereEqualTo("day", dayOfTheWeek);
// What to add in here for time?
query.fromLocalDatastore();
query.findInBackground(new FindCallback<ParseObject>() {
public void done(List<ParseObject> classList, ParseException e) {
if (e == null) {
//Do something with results
} else {
// Failed
}
}
});类会持续一个小时,因此是当前的时间-100 (如果是早上8点,请查找从0700或之前(0800-100)开始的类。答案是否为复合解析查询,如以下所示:
ParseQuery<ParseObject> startHour = ParseQuery.getQuery("classes");
startHour.whereEqualTo("day", dayOfTheWeek);
query.whereLessThan("startHour", currenttime -100);
query.addDescendingOrder("startHour");
query.setLimit(1);
List<ParseQuery<ParseObject>> queries = new ArrayList<ParseQuery<ParseObject>>();
queries.add(startHour);
ParseQuery<ParseObject> mainQuery = ParseQuery.or(queries);
mainQuery.whereEqualTo("day", dayOfTheWeek);
mainQuery.findInBackground(new FindCallback<ParseObject>() {
public void done(List<ParseObject> results, ParseException e) {
// result is the classes that start at or before the hour found
}
});非常感谢StackOverflow上的社区为他们提供的所有帮助!
更新:
我设法用两个parseQueries来解决这个问题:
ParseQuery<ParseObject> startHour = ParseQuery.getQuery("schedule");
startHour.whereEqualTo("day", "Thursday");
startHour.whereLessThan("startHour", (currenttime - 100) / 100 * 100);
startHour.orderByDescending("startHour");
startHour.fromPin("schedule");
startHour.setLimit(1);
startHour.fromLocalDatastore();
startHour.findInBackground(new FindCallback<ParseObject>() {
public void done(List<ParseObject> results, ParseException e) {
// result is the classes that start at or before the hour found
for (ParseObject object : results) {
time = object.getInt("startHour");
}
// Toast.makeText(Dialog_Checkin.this, "time query: " +
// String.valueOf(time),
// Toast.LENGTH_LONG).show();
}
});
ParseQuery<ParseObject> mainQuery = ParseQuery.getQuery("schedule");
mainQuery.whereEqualTo("day", "Thursday");
mainQuery.fromPin("schedule");
mainQuery.whereGreaterThan("startHour", time - 5);
mainQuery.whereLessThan("startHour", time + 5);
// mainQuery.whereEqualTo("startHour", 1930);
mainQuery.fromLocalDatastore();
mainQuery.findInBackground(new FindCallback<ParseObject>() {
public void done(List<ParseObject> results, ParseException e) {
// result is the classes that start at or before the hour found
if (e == null) {
Toast.makeText(Dialog_Checkin.this, "array values: " + String.valueOf(results.size()),
Toast.LENGTH_LONG).show();
for (ParseObject object : results) {
Toast.makeText(Dialog_Checkin.this, "array values: " + object.getString("class"),
Toast.LENGTH_LONG).show();
}
} else {
Toast.makeText(Dialog_Checkin.this, e.getMessage(), Toast.LENGTH_LONG).show();
}
// Toast.makeText(Dialog_Checkin.this, "array values: " +
// String.valueOf(results.size()),
// Toast.LENGTH_LONG).show();
}
});然而,我似乎发现了一个问题。如果我在第二个查询中添加了一个约束
mainQuery.whereEqualTo("startHour",时间);
它返回0的结果。如果我更改了添加以下两个约束,它就能工作:
mainQuery.whereGreaterThan("startHour", time-5);
mainQuery.whereLessThan("startHour", time+5);那么,为什么如果我做GT和LT,它可以工作,但不等于?我已经将它作为一个bug发布在解析的站点上,下面是我的数据库程序的屏幕截图,其中显示了我希望返回的两个条目:

发布于 2014-07-18 05:15:10
这是一个有效的错误,已经用facebook https://developers.facebook.com/bugs/335038033327436/解决了。
发布于 2014-07-12 06:25:25
所以我找出了部分问题,尽管仍然有一个bug。运行两个"findInBackground“操作似乎存在时间问题,第二个查询在第一个操作期间或之前实际运行。这一点很明显,当我试图祝酒“时间-5",我会得到一个弹出式表示"-5",而不是一个4位数的时间,表明时间变量尚未从第一个查询设置。
最后,我将第一个查询更改为常规查询(ParseQuery.find()),从而解决了这个问题。这始终为我提供了第二个查询所需的时间值。
使用"whereEqualTo“似乎仍然存在不止一次的问题,因此我不得不使用GreaterThan和LessThan子句来解决这个问题。下面是我想要的代码
ParseQuery<ParseObject> startHour = ParseQuery.getQuery("schedule");
startHour.whereEqualTo("day", dayOfTheWeek);
startHour.whereLessThan("startHour", (currenttime - 100));
startHour.orderByDescending("startHour");
startHour.fromPin("schedule");
startHour.setLimit(1);
startHour.fromLocalDatastore();
startHour.clearCachedResult();
List<ParseObject> results;
try {
results = startHour.find();
ParseObject result = results.get(0);
Toast.makeText(Dialog_Checkin.this, String.valueOf(result.getInt("startHour")),
Toast.LENGTH_LONG).show();
timeT = result.getInt("startHour");
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
ParseQuery<ParseObject> mainQuery = ParseQuery.getQuery("schedule");
mainQuery.whereEqualTo("day", dayOfTheWeek);
mainQuery.fromPin("schedule");
mainQuery.whereGreaterThan("startHour", timeT - 5);
mainQuery.whereLessThan("startHour", timeT + 5);
// mainQuery.whereEqualTo("startHour", timeT); //This doesn't work...duhh
mainQuery.fromLocalDatastore();
mainQuery.findInBackground(new FindCallback<ParseObject>() {
public void done(List<ParseObject> results, ParseException e) {
// result is the classes that start at or before the hour found
if (e == null) {
for (ParseObject object : results) {
Toast.makeText(Dialog_Checkin.this, "array values: " + object.getString("class"),
Toast.LENGTH_LONG).show();
}
} else {
Toast.makeText(Dialog_Checkin.this, e.getMessage(), Toast.LENGTH_LONG).show();
}
}
});https://stackoverflow.com/questions/24689712
复制相似问题