PHP + Mysql:来自第一个查询的动态表名,用于执行第二个查询


PHP + Mysql: dynamic table name from first query for execution of second query

我有三个表,第一个是存储应用程序的表,第二个是存储不同在线表单(不同类型的应用程序(的表,第三个是存储实际表单数据的表:

    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 语句中使用。

您需要对三个表应用连接,并选择第三个表的count(PK(,同时为第三个表的PK添加分组依据子句。

注意:PK 用于主键