gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 22:05:30 25 4
gpt4 key购买 nike

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

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

最佳答案

需要对三张表进行join,选择第三张表的count(PK),同时为第三张表的PK添加group by子句。

注意:用于主键的PK

关于PHP + MySQL : dynamic table name from first query for execution of second query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19309648/

25 4 0