我有三个表,第一个是存储应用程序的表,第二个是存储不同在线表单(不同类型的应用程序)的表,第三个是存储实际表单数据的表:
TABLE applications=========
-applicationID (PK)
-formID (FK)
-formRecordID
====================
TABLE forms=========
-formID (PK)
-formName
-tableName (could be 'form_businessLicense','eventLicense',etc)
====================
TABLE form_businessLicense=====
-recordID (PK)
-dateSubmitted
-(a whole bunch of other data)
===============================
“formRecordID”指向“form_businessLicense”或“eventLicense”中的“recordID”。由于它可以引用任何表,因此它不能是外键。因此,我从“forms”表中获取 tableName,然后构建一个查询以从中获取所有应用程序数据,例如“form_businessLicense”。
所以我需要从所有应用程序中获取数据,以及从填写的申请表中获取一些数据(例如:form_businessLicense)。我只是要粘贴我的代码(我实际上是在查询一组给定 ID 中的所有应用程序):
$applications = $this->selectAll(
"SELECT applicationID, formName, tableName, fieldIdentifier, formRecordID, dateSubmitted, DATE_FORMAT(dateSubmitted,'%c/%e/%Y') AS dateSubmittedFormat
FROM applications AS a
JOIN forms AS f
ON a.formID = f.formID
WHERE a.applicationID IN (".$applicationIDs.")
ORDER BY dateSubmitted ASC"
);
for($a=0;$a<count($applications);$a++){
$form = $this->select("SELECT ".$applications[$a]['fieldIdentifier']." AS identifierName
FROM ".$applications[$a]['tableName']."
WHERE recordID = ".$applications[$a]['formRecordID']
);
$applications[$a]['identifierName'] = $form['identifierName'];
}
有没有办法将这两个查询合并为一个,这样我就不必遍历所有结果并为每个结果运行单独的查询?我觉得我可以通过 JOIN 来做到这一点,但我不确定如何引用“tableName”和“formRecordID”以在同一个 SQL 语句中使用。