在for循环中运行多个查询

时间:2019-07-10 09:27:29

标签: php arrays for-loop mysqli

我正在尝试一种特殊的显示方式。现在运行的查询可以工作并获得我想要的结果,但是结果非常慢。我知道这是使用循环并在其中包含第二个查询的结果。 第二个查询需要数组中的第一个查询的ID。 该数组用于循环,然后由第二个查询使用。有没有一种方法可以因为for循环而无需多次执行第二个查询。

$sql = "SELECT DISTINCT CO.CursusID, DATE(CO.DatumBegin) AS Datum
        FROM cursusonderdelen CO
        LEFT JOIN psentity P ON CO.CursusID = P.psid
        INNER JOIN opleidingonderdelen OP ON CO.OnderdeelID = OP.OnderdeelID
        INNER JOIN opleidingen O on OP.OpleidingID = O.OpleidingID
        WHERE P.deleted = 0 AND YEAR(CO.DatumBegin) = $year AND MONTH(CO.DatumBegin) = $month $where
        ORDER BY CO.DatumBegin";

$CursusID = 28115;

$result = mysqli_query($conn, $sql);
$datas = array();
if (mysqli_num_rows($result) > 0) {
    while ($row = mysqli_fetch_assoc($result)) {
        $datas[] = $row;
    }
    $CID = array_column($datas, 'CursusID');

    print_r($CID);

    for($i = 0;  $i <= 200; $i++ ){

        if ($CID[$i] > 0) {

            $CursusID = $CID[$i];

        }


        if(isset($_SESSION['zoek'])){

            $zoek = $_SESSION['zoek'];

        }else{

            $zoek = '';

        }


                $sql2 = "
            SELECT  C.CursusID, CB.BedrijfID, CO.CursusOnderdeelID, OP.Opleidingnaam, O.onderdeelnaam, CO.DatumBegin as datum, CO.DatumEind, CODD.Docent, CODA.Assistent,
            CASE WHEN CB.BedrijfID > 0 THEN B.accountname ELSE 'Geen bedrijf' END AS Bedrijf,
            CASE WHEN Aantal > 0 THEN Aantal ELSE '0' END AS Aantal, CASE WHEN COL.LocatieID > 0 THEN L.Locatienaam WHEN COL.BedrijfID > 0 THEN B.accountname ELSE 'Geen locatie' END AS Cursuslocatie,
            CASE WHEN CB.BedrijfID > 0 THEN B.accountname ELSE 'Geen bedrijf' END AS Bedrijf, CASE WHEN COL.LocatieID > 0 THEN L.Woonplaats WHEN COL.BedrijfID > 0 THEN BS.ship_city ELSE 'Geen locatie' END AS Lesplaats,
            ED.Lunch, ED.Subsidie,ED.Exameninstantie, ED.Certificaten, ED.Gefactureerd, ED.Uitnodigingen, ED.Lesmateriaal, ED.Praktijkmateriaal, ED.Certificatendatum, ED.bedrag, ED.Overnachting
            FROM cursussen C
            LEFT JOIN cursusbedrijven CB ON C.CursusID = CB.CursusID
            LEFT JOIN vtigercrm600.vtiger_account B ON CB.BedrijfID = B.accountid
            LEFT JOIN vtigercrm600.vtiger_accountshipads BS ON B.accountid = BS.accountaddressid
            LEFT JOIN opleidingen OP ON C.OpleidingID = OP.OpleidingID
            LEFT JOIN cursusonderdelen CO ON C.CursusID = CO.CursusID
            LEFT JOIN cursusonderdeellocaties COL ON CO.CursusOnderdeelID = COL.CursusOnderdeelID
            LEFT JOIN onderdelen O ON CO.onderdeelID = O.onderdeelID
            LEFT JOIN locaties L ON COL.LocatieID = L.LocatieID
            LEFT JOIN (SELECT CC.BedrijfID, COC.CursusOnderdeelID, COUNT(COC.CursistID) AS Aantal FROM cursusonderdeelcursisten COC
            LEFT JOIN cursuscursisten CC ON COC.CursusID = CC.CursusID AND COC.CursistID = CC.CursistID
            GROUP BY COC.CursusOnderdeelID, CC.BedrijfID) COC ON CO.CursusOnderdeelID = COC.CursusOnderdeelID AND CB.BedrijfID = COC.BedrijfID
            LEFT JOIN (SELECT COD.CursusOnderdeelID, GROUP_CONCAT(' ', CONCAT(D.Voornaam, ' ', D.Achternaam)) AS Docent
            FROM cursusonderdeeldocenten COD
            LEFT JOIN docenten D ON COD.DocentID = D.DocentID WHERE COD.Docent = 1 GROUP BY COD.CursusOnderdeelID) CODD ON CO.CursusOnderdeelID = CODD.CursusOnderdeelID
            LEFT JOIN (SELECT COD.CursusOnderdeelID, GROUP_CONCAT(' ', CONCAT(D.Voornaam, ' ', D.Achternaam)) AS Assistent
            FROM cursusonderdeeldocenten COD LEFT JOIN docenten D ON COD.DocentID = D.DocentID WHERE COD.Assistent = 1 GROUP BY COD.CursusOnderdeelID) CODA ON CO.CursusOnderdeelID = CODA.CursusOnderdeelID
            LEFT JOIN extradata ED ON C.CursusID = ED.CursusID AND CO.CursusOnderdeelID = ED.CursusonderdeelID
            LEFT JOIN psentity P ON C.CursusID = P.psid
            WHERE P.deleted = 0

            AND C.CursusID = $CursusID
            ORDER BY date(CO.DatumBegin),  CO.CursusOnderdeelID";

//        echo $sql2;

        $result2 = mysqli_query($conn, $sql2);

        $datas2 = array();
        while ($row = mysqli_fetch_assoc($result2)) {
            $datas2[] = $row;
            $opleiding = $row['Opleidingnaam'];
        }


        echo "<tr>
            <td id='opleiding' colspan='100%'>" . $opleiding . "</td>
            </tr>";




        foreach ($datas2 as $data2) {

            $cursusid = $data2['CursusID'];

            $coid = $data2['CursusOnderdeelID'];
            $bedrijfid = $data2['BedrijfID'];


            if ($data2['Certificatendatum'] = '1900-01-01'){
                $data2['Certificatendatum'] = '';
            }

            if($data2['Certificatendatum'] != '') {
                $newDate = date("d-m-Y", strtotime($data2['Certificatendatum']));

                $data2['Certificaten'] = $data2['Certificaten'] . '<br>' . $newDate;
            }


            if($data2['bedrag'] != '') {
                $data2['Gefactureerd'] = $data2['Gefactureerd'] . '<br>€' . $data2['bedrag'];
            }

            include 'index.indicatie.php';

            $data2['cursusdatum'] = date('d-m-Y', strtotime($data2['datum'])) . '</br>' . date('H:i', strtotime($data2['datum'])) . ' - ' . date('H:i', strtotime($data2['DatumEind']));

            echo "<tr class='view_data' onclick='modalFucntion(" . $cursusid . "," . $coid . ", " . $bedrijfid . ")' >";
            for ($count = 0; $count < $acount; $count++) {

                $info = $veldnaam[$count];


                echo "<td  id='" . $veldid[$count] . $bedrijfid . $coid . "' bgcolor='" . $bgcolor . "' style=''>" . $data2[$info] . "</td>";

            }
            echo "</tr>";
        }
    }
}
echo '</table>';

0 个答案:

没有答案