我试图在另一个查询中运行另一个查询,这里是我的代码
<select name ="selectDiagnose" id = "Diagnose">
<?php
$result2 = $user->con->query("SELECT * FROM `medical-history` WHERE patientID = '$row["ID"]' ");
while ($row = $result2->fetch_array()){
?>
<option value = '<?php $row2["ID"] ?>'> <?php echo "Name: ".$row2["name"]." ,Date: ".$row2["date"]." ,Type: ".$row2["DiagnosetypeID"] ?></option>
<?php
}
?>
</select>
这里的问题是该类型在另一个表中,所以我想在病历中选择诊断基础的类型diagnoseTypeID
<select name ="selectDiagnose" id = "Diagnose">
<?php
$result2 = $user->con->query("SELECT * FROM `medical-history` WHERE patientID = '$row["ID"]' ");
while ($row = $result2->fetch_array()){
?>
<option value = '<?php $row2["ID"] ?>'> <?php echo "Name: ".$row2["name"]." ,Date: ".$row2["date"]." ,Type: ". **$user->con->query("SELECT type FROM `Diagnose type` WHERE ID = '$row["diagnosetypeID"]' ");** ?></option>
<?php
}
?>
</select>
我该怎么做?如果有另一种方式?
答案 0 :(得分:1)
有一点需要注意,
<?php $row2["ID"] ?>
根本没有做任何事情,你忘了echo
它。话虽这么说,而不是在内部运行查询取决于外部查询的值,而不是JOIN
查询而只执行一个查询。
$result2 = $user->con->query("SELECT mh.*, dt.type
FROM `medical-history` mh
JOIN `Diagnose type` dt ON dt.ID=mh.diagnosetypeID
WHERE patientID = '".$row['ID']."'");
另外值得注意的是,您应该使用带占位符的参数化查询,直接在查询中使用变量可能会破坏它,或者最坏的情况下危害您的数据库。
答案 1 :(得分:0)
更好的选项使用像这样的连接查询
SELECT mh.*, dt.type FROM `medical-history` mh LEFT JOIN `Diagnose type` dt ON dt.ID=mh.diagnosetypeID WHERE patientID = '".$row['ID']."'";
了解有关加入
的更多信息https://dev.mysql.com/doc/refman/5.7/en/join.html
如果您想获取没有连接查询的类型名称,请检查此
<select name="selectDiagnose" id="Diagnose">
<?php
$result2 = $user->con->query("SELECT * FROM `medical-history` WHERE patientID = '" . $row["ID"] . "'");
while ($row = $result2->fetch_array()) {
$result3 = $user->con->query("SELECT type FROM `Diagnose type` WHERE ID = '" . $row["diagnosetypeID"] . "'");
$row_type = $result3->fetch_array();
$type_name = $row_type['type'];
?>
<option
value='<?php $row2["ID"] ?>'> <?php echo "Name: " . $row2["name"] . " ,Date: " . $row2["date"] . " ,Type: " . $type_name ?></option>
<?php
}
?>
</select>