问题描述
我正在编写使用数据库的应用程序,它从数据库中选择一些数据并在 ListView 中将其显示给用户。从数据库中选择项目时,我必须遵守一些标准。
- 在数据库中我保留了一些位置(纬度和经度),在选择项目时我必须获取我当前的位置并将项目从离我较近的位置排序到较远的位置。
- 在数据库中,我有 TOP 公司,它们必须始终在列表中排在第一位,与其位置(纬度和经度)无关
问题
所以我需要一些查询来一次按正确的顺序选择所有这些信息,因为目前我正在使用 3 个查询来做到这一点。
当前解决方案
这是我用来选择我需要的所有信息的查询,目前我选择所有项目将它们添加到数组中,然后才根据距离在数组中对它们进行排序。
选择顶级公司
select CompanyInfo._id, CompanyInfo.name_en, ContactInfo.telephones, ContactInfo.location, CompanyInfo.websites, ContactInfo.address_en, ContactInfo.location, ContactInfo.position, TopFirmsByCode.Level, ContactInfo.name_en from CompanyInfo, ContactInfo, TopFirmsByCode where CompanyInfo._id=TopFirmsByCode.RegNo AND CompanyInfo._id=ContactInfo._id AND TopFirmsByCode.Code = 452 order by TopFirmsByCode.Level ASC, CompanyInfo.rating_ordering_en ASC`
选择按距离排序的其他公司
select CompanyInfo._id, CompanyInfo.name_en, ContactInfo.telephones,ContactInfo.location,CompanyInfo.websites,ContactInfo.address_en,ContactInfo.location, ContactInfo.position, ContactInfo.name_en from CompanyInfo, ContactInfo where CompanyInfo._id=ContactInfo._id AND CompanyInfo.category_codes LIKE %547% order by ContactInfo.location ASC
最佳答案
试一试:
select CompanyInfo._id, CompanyInfo.name_en, ContactInfo.telephones,
ContactInfo.location, CompanyInfo.websites, ContactInfo.address_en,
ContactInfo.position, ContactInfo.name_en, TopFirmsByCode.Level,
(case when TopFirmsByCode.Code = 452 then 1 else 0 end) as isTopFirm
from CompanyInfo
join ContactInfo on (CompanyInfo._id=ContactInfo._id)
join TopFirmsByCode on (CompanyInfo._id=TopFirmsByCode.RegNo)
where (TopFirmsByCode.Code=452 OR CompanyInfo.category_codes LIKE %547%)
order by isTopFirm DESC, TopFirmsByCode.Level ASC, CompanyInfo.rating_ordering_en ASC
关于java - 优化 SQLite 查询以使用一个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25738652/