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

时间:2013-10-11 03:10:07

标签: php mysql join dynamic

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

    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”。由于它可以引用任何表,因此它不能是外键。因此,我从“表单”表中获取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语句中使用。

1 个答案:

答案 0 :(得分:0)

您需要将连接应用于三个表,并在为第三个表的PK添加group by子句时选择第三个表的count(PK)。

注意:用于主键的PK