gpt4 book ai didi

android - 在火车时刻表应用程序中合并 2 个 android sqlite 查询

转载 作者:行者123 更新时间:2023-12-03 18:18:05 24 4
gpt4 key购买 nike

我正在用 sqlite 构建一个用于火车时刻表的 android 应用程序。我的应用程序请求来自用户 2 个火车站,往返时间和日期(我现在忽略日期)。对于那些我一直在尝试进行单个查询以返回给定日期这些站点之间的所有可用时间表。

我的表结构是:

stations (_id INTEGER PRIMARY KEY AUTOINCREMENT, 
name TEXT,
central BOOLEAN)

schedule_stations (_id INTEGER PRIMARY KEY AUTOINCREMENT,
arrival TEXT,
departure TEXT,
availability INTEGER,
stationID INTEGER,
FOREIGN KEY(stationID) REFERENCES stations(_id))

schedule (_id INTEGER PRIMARY KEY AUTOINCREMENT,
trainID INTEGER,
day TEXT,
scheduleStationId INTEGER,
FOREIGN KEY(scheduleStationId) REFERENCES schedule_stations(_id))

到目前为止,我已经能够使用给定的 From 站设计 2 个查询:
            c1=db.rawQuery(
"SELECT s2._id, name, departure, trainID " +
"FROM schedule_stations s1 INNER JOIN stations s2 " +
"ON s1.stationID = s2._id INNER JOIN schedule s3 " +
"ON s3.scheduleStationId = s1._id " +
"WHERE stationID=? ",
new String[] {station1+""});

这给了我所有从提供的发件人站 (station1) 出发的信息。

并使用我拥有的 To 站:
            c2=db.rawQuery(
"SELECT s2._id, name, arrival, trainID " +
"FROM schedule_stations s1 INNER JOIN stations s2 " +
"ON s1.stationID = s2._id INNER JOIN schedule s3 " +
"ON s3.scheduleStationId = s1._id " +
"WHERE stationID=? AND trainID IN ("+queryPlaceholders(strlist.size()-1)+")",
strlist.toArray(new String[0]));

这为我提供了所有到达所提供的 To 车站的到达站,这些车站的 trainID 出现在第一个查询中(以保证连接)。

如果我单独输出它们看起来正确的游标(注意最后 3 个元素是:站名 | 时间 | trainID):
C1: Row: 0, Values: 1; Station A; 08:00; 1
C1: Row: 1, Values: 1; Station A; 12:00; 2
C2: Row: 0, Values: 2; Station B; 09:00; 1
C2: Row: 1, Values: 2; Station B; 13:00; 2

我想要的是以某种方式将这些合并到一个查询中,这样我最终只有一个光标可以用来填充我的 listadapter 和我的 View 。 MergeCursor 没有帮助,因为它只是添加了列,没有通过 trainID 链接它们。
我尝试在查询之间使用 INNER JOIN 和 UNION,但遇到了语法错误。

假设上面的输出,我对单个查询的期望是一个提供 2 行的游标,每行有 2 个名称站和 2 个日期(到达/离开),因为这是我想在 android View 的每一行中显示的信息。

最佳答案

SELECT FromSch.trainID,
FromSt.name,
FromSchSt.departure,
ToSt.name,
ToSchSt.arrival
FROM stations FromSt
JOIN schedule_stations FromSchSt ON FromSt._id = FromSchSt.stationID
JOIN schedule FromSch ON FromSchSt._id = FromSch.scheduleStationId
JOIN schedule ToSch ON FromSch.trainID = ToSch.trainID
AND FromSch.day = ToSch.day
JOIN schedule_stations ToSchSt ON ToSch.scheduleStationId = ToSchSt._id
JOIN stations ToSt ON ToSchSt.stationID = ToSt._id
WHERE FromSt._id = ?
AND ToSt._id = ?
-- AND FromSch.day = ?

关于android - 在火车时刻表应用程序中合并 2 个 android sqlite 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13256993/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com