3 つのテーブルがあります。1 つ目はアプリケーションを格納するテーブル、2 つ目はさまざまなオンライン フォーム (さまざまな種類のアプリケーション) を格納するテーブル、3 つ目は実際のフォーム データを格納するテーブルです。
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'];
}
これら 2 つのクエリを 1 つにマージして、すべての結果をループし、結果ごとに個別のクエリを実行する必要がないようにする方法はありますか? JOIN でこれを行うことができると思いますが、同じ SQL ステートメントで使用する「tableName」と「formRecordID」を参照する方法がわかりません。