简化php / mysql嵌套调用

时间:2016-09-18 06:19:43

标签: php mysql

我有一个mysql表,我试图变成jQuery listview小部件。我遇到问题的部分是如何最好地从表中提取信息而不对db本身进行多次查询。我有以下代码:

global $conn;
$sql = "SELECT `id` FROM `implantFamilies` WHERE `familySelector` = '" . $_POST['implantFamily'] . "'"; //need to sanitise this
$result = $conn->query($sql);
if ($result->num_rows == 1) {
    while($row = $result->fetch_assoc()) {
        $familyId = $row["id"];
    }
} else {
    die("Error: " . $result->num_rows . " family groups in result. Alert administrator.");
}
?>
<form class="ui-filterable">
<input id="filterBasic-input" data-type="search">
</form>
<?php
$sql = "SELECT DISTINCT `familySection` FROM `implants` WHERE `familyGroupId` = '" . $familyId . "'";
$sections = $conn->query($sql);
if ($sections->num_rows > 0) {
    while ($sectionRow = $sections->fetch_assoc()) {
        $output .= "<b>" . $sectionRow["familySection"] . "</b><br>";
        //DISPLAY COLLAPSIBLE DIV HERE
        $sql = "SELECT DISTINCT `sectionHeading` FROM `implants` WHERE `familyGroupId` = '" . $familyId . "' AND `familySection` = '" . $sectionRow["familySection"] . "'";
        $dividers = $conn->query($sql);
        if ($dividers->num_rows > 0) {
            while ($headingRow = $dividers->fetch_assoc()) {
                $output .= "<i>" . $headingRow["sectionHeading"] . "</i><br>";
                //DISPLAY list-divisers DIV HERE
                $sql = "SELECT `reference`, `description`, `filterText`, `requiresLot` FROM `implants` WHERE `familyGroupId` = '" . $familyId . "' AND `familySection` = '" . $sectionRow["familySection"] . "' AND `sectionHeading` = '" . $headingRow["sectionHeading"] . "'";
                $implants = $conn->query($sql);
                if ($implants->num_rows > 0) {
                    while ($implantRow = $implants->fetch_assoc()) {
                        $output .= $implantRow["description"] . "<br>";
                        //DISPLAY implants DIV HERE
                    }
                } else {
                    $output = "0 results";
                }
            }
        } else {
            $output = "0 results";
        }
    }
} else {
    $output = "0 results";
}
$conn->close();
echo $output;

在我放入表中的第一批(简单)数据中,此代码执行23个mysql查询。必须有一个更简单的方法!

0 个答案:

没有答案