我正在创建Android应用,用户输入一些收据和日志。关系是:收据has_many日志。
这是我的收据和日志模型。
@Table(name = "Logs")
public class Logs extends Model {
@Column(name="PlateNumber")
String plate_number;
@Column(name="SortID")
String sort_id;
@Column(name="Grade")
String grade;
@Column(name = "Diametar")
double diameter;
@Column(name="Length")
double length;
@Column(name="CreatedAt")
Date createdAt;
@Column(name="Receipt")
Receipt receipt;
@Column(name = "Price")
Price price;
}
@Table(name = "Receipt")
public class Receipt extends Model {
@Column(name="Place")
String place;
@Column(name="ShippingNumber")
String shippingNumber;
@Column(name="Warehouse")
String warehouse;
@Column(name="Carrier")
String carrier;
@Column(name="LicencePlate")
String licencePlate;
@Column(name = "Driver")
String driver;
@Column(name = "Customer")
String customer;
@Column(name= "DestWarehouse")
String destWarehouse;
@Column(name = "Employee")
String employee;
@Column(name = "PriceType")
String priceType;
@Column(name = "PriceCorrection")
Double priceCorrection;
@Column(name = "PriceCorrection2")
Double priceCorrection2;
@Column(name = "Supplier")
String supplier;
@Column(name = "CreatedAt")
Date createdAt;
}
这是我的活动,我正在努力实现这一目标,但未成功。
public class LogsRecapitulation extends AppCompatActivity {
private ListView mainListView;
private BaseAdapter listAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_listview);
mainListView = (ListView) findViewById(R.id.ListViewItem);
//recieve RecepitID in displayLogs.activity
final long forwardedId = (long) getIntent().getExtras().get(String.valueOf("recepitID"));
List<Logs> logsList = new Select().from(Logs.class).where("Receipt = " + forwardedId).groupBy("SortID").execute(); // I grouped Logs by sortId in this line.
listAdapter = new RecapitulationArrayAdapter(logsList);
mainListView.setAdapter(listAdapter);
}
private class RecapitulationArrayAdapter extends BaseAdapter {
private LayoutInflater inflater;
private List<Logs> logsList;
public RecapitulationArrayAdapter(List<Logs> logsList) {
inflater = LayoutInflater.from(LogsRecapitulation.this);
this.logsList = logsList;
}
@Override
public int getCount() {
return logsList.size();
}
@Override
public Object getItem(int position) {
return logsList.get(position);
}
@Override
public long getItemId(int position) {
return logsList.get(position).getId();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.logs_recapitulation, parent, false);
}
Logs log = logsList.get(position);
((TextView) convertView.findViewById(R.id.rec_log_sort)).setText(log.sort_id);
((TextView) convertView.findViewById(R.id.rec_log_class)).setText(log.grade);
((TextView) convertView.findViewById(R.id.rec_log_count)).setText(String.valueOf(logsList.size()));
((TextView) convertView.findViewById(R.id.rec_logs_mass)).setText(String.format("%.2f m3", log.getM3()));
if (log.receipt.priceType.equals("Na panju")) {
((TextView) convertView.findViewById(R.id.rec_log_price_default)).setText(String.valueOf(log.price.stumpPrice_kn));
} else {
((TextView) convertView.findViewById(R.id.rec_log_price_default)).setText(String.valueOf(log.price.roadPrice_kn));
}
if (log.receipt.priceType.equals("Na panju")) {
((TextView) convertView.findViewById(R.id.rec_calculated_price)).setText(String.format("%.2f KN", log.price.stumpPrice_kn * log.getM3()));
} else {
((TextView) convertView.findViewById(R.id.rec_calculated_price)).setText(String.format("%.2f KN", log.price.roadPrice_kn * log.getM3()));
}
return convertView;
}
}
}
所以,到目前为止我所做的是我在这个BaseAdapter中按sortID显示日志,但在每种类型中它都显示我最后添加的日志及其数据。
现在我需要在下面的图像上显示数据 - 部分在哪里是REKAPITULAT。在那里我需要按sortID分组,然后在每种类型中我需要按等级对它们进行分组。
例如,如果我喜欢图像排序1有4个日志,每个等级2个(A,B)那么它需要像图像一样显示它。
我被困在这里,如果有人知道怎么做并且愿意提供帮助,我将非常感激。
问题:如何创建SQL查询或修复此代码以显示上面图像上的数据?
答案 0 :(得分:1)
以下是使用ActiveAndroid GROUP BY
和JOIN
的示例查询:
new Select("SUM(Logs.Price)")
.from(Logs.class)
.join(Receipt.class)
.on("Receipt.Id = Logs.Receipt")
.groupBy("Logs.sortID")
.execute();
通过此查询,您将获得Log
个实例,因此您需要将SUM(Logs.Price)
字段映射到有效的Log
字段,例如{ {1}}。例如:
Price
查询应根据您的用例进行调整。