我想要使用 officeID 查询 officeSettings 表,然后当 App 为“TRUE” 时,从 apppSettings 表中匹配的 appName 返回数据。回显结果然后循环所有应用程序。
我知道我需要使用 JOIN,但我在匹配 officeID 然后检查是否为 TRUE 时迷失了方向。
办公室设置
办公室ID | 应用1 | 应用2 | 应用3 |
---|---|---|---|
101010 | 正确 | 正确 | 错误 |
951751 | 正确 | 错误 | 错误 |
648299 | 错误 | 正确 | 正确 |
应用程序设置
应用名称 | 图标 | 网址 | 链接1 | 网址1 | 链接2 | 网址2 |
---|---|---|---|---|---|---|
应用1 | img/app1.svg | # | # | # | # | # |
应用2 | img/app2.svg | # | # | # | # | # |
应用3 | img/app2.svg | # | # | # | # | # |
您可以使用这样的查询:
SELECT aps.*
FROM officeSettings ofs
JOIN appSettings aps ON
(ofs.App1 = 'TRUE' AND aps.appName = 'App1') OR
(ofs.App2 = 'TRUE' AND aps.appName = 'App2') OR
(ofs.App3 = 'TRUE' AND aps.appName = 'App3')
WHERE ofs.officeID = 648299;
输出:
应用名称 | 图标 | 网址 | 链接1 | 网址1 | 链接2 | 网址2 |
---|---|---|---|---|---|---|
应用2 | img/app2.svg | # | # | # | # | # |
应用3 | img/app2.svg | # | # | # | # | # |
此方法的问题在于,要添加另一个应用程序,您必须向
officeSettings
添加另一列,然后向查询添加额外的联接条件。
更好的方法是将
officeSettings
存储为 (officeID, appName)
元组:
办公应用程序
办公室ID | 应用名称 |
---|---|
101010 | 应用1 |
101010 | 应用2 |
951751 | 应用1 |
648299 | 应用2 |
648299 | 应用3 |
现在查询不需要了解各个应用程序:
SELECT aps.*
FROM officeApps oa
JOIN appSettings aps ON oa.appName = aps.appName
WHERE oa.officeID = 648299;
仍然输出:
应用名称 | 图标 | 网址 | 链接1 | 网址1 | 链接2 | 网址2 |
---|---|---|---|---|---|---|
应用2 | img/app2.svg | # | # | # | # | # |
应用3 | img/app2.svg | # | # | # | # | # |