将来自两个不同的已排序游标的数据从不同表的数据排序为一个

时间:2013-09-04 11:53:14

标签: android database sqlite sorting cursor

我想对来自两个游标的结果进行排序。

让我们考虑两个游标cursor1cursor2

Cursor1用于表格X Cursor2用于表格Y

Cursor1使用日期类型开始列对数据进行排序,Cursor2使用日期类型日期列对数据进行排序。

有些字段在两个表中都很常见,有些则不是。

但是,这两个表之间没有绝对的关系。

问题很明显。组合数据应该是两个游标的排序列表。

目前正在发生的事情是:

我从光标Cursor1获取排序列表,该列表独立于来自游标Cursor2的排序列表。

如何合并生成的游标数据,以便按日期(Start and Date)获取排序列表?

例如:

我收到了这个结果:

| Date                 | Type        | Location              |
|:---------------------|------------:|:---------------------:|
| 10-Jul-2013 07:05:00 | Random      | Washougal, Washington
| 10-Jul-2013 08:30:00 | Single      | Vancouver, Washington
| 10-Jul-2013 07:30:00 | Multiple    | Vancouver, Washington
| 10-Jul-2013 15:31:00 | Double      | Vancouver, Washington

前两行来自表X,最后两行来自上表中的表Y.

但我想要这个结果:

| Date                 | Type        | Location              |
|:---------------------|------------:|:---------------------:|
| 10-Jul-2013 07:05:00 | Random      | Washougal, Washington
| 10-Jul-2013 07:30:00 | Multiple    | Vancouver, Washington
| 10-Jul-2013 08:30:00 | Single      | Vancouver, Washington
| 10-Jul-2013 15:31:00 | Double      | Vancouver, Washington

查询应该是:

Cursor1 = Select alpha, beeta, gamma, Remark, id, number from X order by Start ASC


Cursor2 = Select Type, Date, gamma, Location, Obs, number from Y order by Date ASC

从Cursor1获取结果后,我在这样的循环中创建字符串html:

String itemList = "";

itemList += "<tr><td align='left' width='28%' style='font-size:8px;padding-left: 15px'>"
    + cursor1.getString(1)
    + "</td><td width='16%' style='font-size:8px'>"
    + cursor1.getString(0)
    + "</td><td width='10%' style='font-size:8px'>"
    + cursor1.getString(2)
    + "</td><td width='20%' style='font-size:8px'>" 
    + "</td><td width='35%'>" + cursor1.getString(3) + "</td></tr>";

然后将此itemList进一步添加到Cursor2的结果中,以完成两个游标的itemList。

最终的itemList在布局中显示为 html

1 个答案:

答案 0 :(得分:2)

您可以将两个查询合并到一个查询中。

首先,确保两个结果具有相同的列数。 如果没有,您可能需要向一个查询添加一些虚拟列。

然后将两者合并到UNION ALL

SELECT alpha, beeta, gamma, Remark, id,   number FROM X
UNION ALL
SELECT Type,  Date,  gamma, Obs,    NULL, number FROM Y

然后选择您要订购的整个结果的一列。 (结果的列名来自第一个查询。) 在这种情况下,Start列不是结果的一部分,因此我们必须添加它(并且Date列在第二个查询中重复,但这对于其值最终需要在用于排序的结果列中:

SELECT alpha, beeta, gamma, Remark, id,   number, Start AS SortThis FROM X
UNION ALL
SELECT Type,  Date,  gamma, Obs,    NULL, number, Date              FROM Y
ORDER BY SortThis