【问题标题】:Compare 3 tables in SQLite比较 SQLite 中的 3 个表
【发布时间】:2014-01-11 15:18:12
【问题描述】:

最初,我有 2 张桌子。我对其进行了规范化,因为这些表的关系是多对多的。现在我有 3 个。

工作

  • jID PK
  • jName
  • jDesc
  • jEarnings
  • jTags

课程

  • cID PK
  • cName
  • cDesc
  • cSchool
  • cProgram

就业课程

  • ID PK
  • jID FK
  • cID FK

我的应用显示作业的表格视图

点击后会显示作业的 UIViewcontroller 以及相关课程的 tableview

如何查询jobcourse表,以便获取到某个job的所有相关Course?

【问题讨论】:

  • 建议:使用 Core Data 而不是 SQLite 数据库。
  • 我对核心数据感到困惑。此外,这是周一到期,因此很难重写代码。所以我可能不得不坚持使用 sqlite

标签: ios sql sqlite uitableview


【解决方案1】:

您可以将两个表连接起来,例如:

SELECT course.* FROM course INNER JOIN jobscourse ON jobscourse.cID = course.cID WHERE jobscourse.jID = ?

这将从course 获取所有条目,其中jobscourse 中的jID 等于某个值。

【讨论】:

  • jobscourse 中的 jID 应该等于 jobs 的 jID .. 那就是 where jobscourse.jID = @"%d", jID 我应该重命名它吗?这样就不会混淆了?
  • @hazelvan 注意,我在 SQL 中使用 ? 占位符并非偶然。您不应该使用stringWithFormat 将值插入到您的SQL 语句中。你应该像我上面那样编写 SQL,然后sqlite3_prepare_v2 准备它,sqlite3_bind_XXX(例如sqlite3_bind_int)绑定值,sqlite3_step 执行 SQL。数值不是什么大问题,但对于您的字符串值,它真的很重要。尝试使用stringWithFormat 方法插入"Red Team" Project LeadABC's Project Manager 之类的字符串,其中值中有引号:它会失败。
  • @hazelvan 你应该重命名 jID 吗?当然,也许jobID 会不那么模棱两可。 (而且个人在表名中的复数形式也会保持一致,或者在我的表名中始终使用单数(jobcoursejobcourse)或复数(jobscourses 和 @ 987654341@),我自己可能倾向于单数。)
  • 我的意思是我是这样的:NSString *query= [NSString stringWithFormat:@"SELECT course * FROM course INNER JOIN jobsCourse ON jobsCourse.courseID = course.cID WHERE jobsCourse.jobID = %d",jID]; 当我点击它时,我如何获得 jID 的值?因为作业表未包含在内部联接中,所以此查询可能不起作用。代码应该是:-(Jobs *)job:(int)jID { Jobs *return = nil; <insert query here> <insert sqlite blahs here>} return retrieve;} 以便我可以通过 jID 获取值吗?还是我错了?
  • 顺便说一句,我不是在插入值,而是在拉取它们
猜你喜欢
  • 2012-03-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-17
  • 1970-01-01
  • 2016-11-23
  • 1970-01-01
  • 1970-01-01
  • 2015-03-15
相关资源
最近更新 更多