MySQLi:用一个变量查询另一个表


MySQLi: Query with a variable to another table

所以,我有一个数据库,里面有几个表。这些表大多包含关于同一文档的信息,并通过一个ID连接(这很愚蠢,因为它们可能都在同一个表中,但我帮助的公司现在无法更改这一点)。我目前正在处理的两个表的内容如下所示。

tblDocument:包含ID+其他信息。

tbl验证:包含ID、验证号和其他信息。

现在,我想做的是使用PHP和MySQLi从tblDocument中的ID中查找tblVerification验证号。我找到了一个允许我将变量传递到查询中的解决方案,但这并不是最有效的解决方案。代码让我感到困惑。我们非常感谢有关查询如何工作的任何其他信息或新的更简单的解决方案的信息。

<?php
$mysqli = new mysqli("ip", "name", "pw", "db");
$dbDoc = $mysqli->query("SELECT * FROM tblDocument ORDER BY ID");
while ($row = $dbDoc->fetch_assoc()) {
    $tempID = $row["ID"];
    $bind = 's';
    $queryThis = $mysqli->prepare("SELECT verificationNo FROM tblVerification WHERE ID = ?");
    $queryThis->bind_param($bind, $tempID);
    $queryThis->execute();
    $queryThis->bind_result($result);
    $queryThis->fetch();
    $queryThis->close();
    $tempVer = $result;
    echo $tempVer . " ";
}
?>

实际问题:这是仅使用PHP和MySQLi实现此结果的最有效方法吗?和/或您可以做些什么来简化它?

你尝试过加入吗?

"SELECT tblDocument.*, tblVerification.verificationNo
FROM tblDocument INNER JOIN tblVerification
    ON tblDocument.ID=tblVerification.id
ORDER BY ID"

在这种情况下应该使用SQL JOIN:-

您的查询应该是:-

"SELECT tblDocument.*, tblVerification.verificationNo
FROM tblDocument
LEFT JOIN tblVerification
ON tblDocument.ID = tblVerification.ID
ORDER BY tblDocument.ID;"

您可以简单地连接两个表:

SELECT tv.id, tv.verificatioNo 
FROM tblVerification tv
INNER JOIN tblDocument td
ON tv.id = td.id
ORDER BY tv.id;

如果您想筛选某些特定的id,请添加WHERE条件:

WHERE tv.id = ?