gpt4 book ai didi

swift - 如何在核心数据中执行复杂的获取请求

转载 作者:行者123 更新时间:2023-11-30 11:23:15 46 4
gpt4 key购买 nike

我已经在我的应用程序中实现了核心数据存储。我需要使用 FetchRequest 和谓词执行复杂的获取,如下 SQLite 查询:

SELECT
diagnosis_drug.drug_id,
diagnosis_drug.weight_bracket_id,
score,
localscore,
(score + localscore) AS score,
drug.*
FROM diagnosis_drug
INNER JOIN drug
ON diagnosis_drug.drug_id = drug.id
WHERE diagnosis_drug.doctor_id = 3
AND diagnosis_id IN (29, 212)
AND score > 0
AND weight_bracket_id = 1
AND diagnosis_drug._d = 0
ORDER BY score DESC

这里的diagnostic_drug和drug是实体,其他是属性。

Entity : Diagnosis_drug
Attributes :
diagnosisId - Int32
doctorId - Int32
drugId - Int32
score - Int32
localScore - Int32

Entity : Drug.
Attributes :
id : Int32
dosage : Int32
volume : Int32
genericName : String
formulation : String
doseType : String
duration : Int32
name : String

药物的“id”属性等于 Diagnosis_drug 的“drugId”属性。查询是从 Diagnosis_drug 中获取得分最高的药物,并对 Drug 实体进行内连接以获取其详细信息。

最佳答案

所以,我发现核心数据几乎没有限制。仅当两个不同实体之间存在关系时,您才可以对它们执行 fetchrequest。即。如果 Person(entity_1) 和他的 mobile(entity_2) 之间存在一对一关系,要获取两者,我们需要对 Person 实体执行获取。要在 Person 上设置过滤器,我们将根据需要添加一个谓词,并在 mobile 上设置过滤器,我们将在同一谓词中的 mobile 属性上放置一个“SUBQUERY”。如果两个实体没有关系,则有一个解决方法。您将这两个实体作为新父实体的子实体,并对新父实体执行提取 ( See Reference !)。尽管如此,这仍然给我们留下了这两个实体已经有其他 parent 的情况!这里不存在关系以及共同的父实体。所以这就是Core data的局限性。您需要分别对这两个实体执行提取。此外,核心数据获取不允许在查询谓词内进行计算(您需要在实体中维护一个额外的变量,并根据需要每次进行更新)。欢迎对我的发现进行任何修正。谢谢。

关于swift - 如何在核心数据中执行复杂的获取请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51055873/

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