我对GAE数据存储区有这样的查询:
SELECT * FROM SimpleEntity WHERE(
__key__
!= SimpleEntity(" 102")AND__key__
!= SimpleEntity(" 104"))ORDER BYSimpleEntity("102")
,count
虽然按升序键(自然排序)排序结果,但不遵循按降序排序的计数。场景是实体键是与计数相反的地图,例如count = 9
映射到SimpleEntity("104")
而count = 7
映射@SuppressLint("SimpleDateFormat")
private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
private Calendar calendar = null;
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
OnDateSetListener dateSetListener = new OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
calendar.set(year, monthOfYear, dayOfMonth);
//this line save-s the DatePicker selected date to the edittext
//you can try with: Date dpDate =new Date(sdf.format(calendar.getTime();
birthDate.setText(sdf.format(calendar.getTime()));
}
};
final DatePickerFragment datePickerFragment = new DatePickerFragment(StepSettingsView.this, dateSetListener, year, month, day);
datePickerFragment.getDatePicker().setMaxDate(new Date().getTime());
datePickerFragment.show();
datePickerFragment.getButton(DatePickerDialog.BUTTON_NEUTRAL).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
birthDate.setText("");
datePickerFragment.dismiss();
}
});
这是一个非常粗略的例子,但它显示了我需要做的事情。只是想确保计数排序将是最终排序,但它没有发生。
这是我正在尝试解决的问题的直观视图:
预期的排序是计数升序
答案 0 :(得分:1)
ORDER BY __key__, count
您的查询首先按__key__
排序,然后count
排序。这是你看到的结果。由于__key__
的性质是唯一的,count
字段永远不会用于排序。你不能有重复的密钥。
修改 我刚看了https://cloud.google.com/appengine/docs/java/datastore/queries?hl=en#Java_Sort_orders
注意:由于App Engine数据存储执行查询的方式,如果查询指定属性上的不等过滤器并对其他属性排序,则必须在其他属性之前排序不等过滤器中使用的属性。
看起来无法在__key__
上使用不等式过滤器执行您想要的操作。您必须在查询之外进行过滤或排序。