Оптимизация запросов PHP Mysql для отчета

У меня есть этот отчет, который фильтрует данные из 5 таблиц, но он очень медленный, занимает около 10 секунд. Я пробовал использовать индекс для некоторых столбцов, но это не помогло.

По сути, первый запрос является главным, а остальные - для его фильтрации, если выполняются другие условия запроса, тогда он его пропускает.

это сценарий:

<div class = "col-md-12">

    <h3>List of Outstandings</h3>

    <table class = "table table-condensed table-bordered table-hover small">
        <thead>
            <tr>
                <th >#</th>
                <th>PR #</th>
                <th>PR Type</th>
                <th>Description</th>
                <th>Dep.</th>
                <th>Date</th>
                <th>Requester</th>
                <th>Assigned to</th>
            </tr>
        </thead>
        <tbody>
            <?php
            $chkk = 0;
            $sql = "SELECT * FROM msr WHERE Status ='Approved'  ";
            $result6 = $connn->query($sql);
            if ($result6->num_rows > 0) {
                $vo = 1;
                while ($row0 = $result6->fetch_assoc()) {
                    $chkk = 0;
                    $MSRID = $row0["MSRID"];
                    $MSRType = $row0["MSRType"];

                    $result4 = "SELECT owner FROM tracking WHERE MSRID='$MSRID' ";
                    $MyRow4 = $connn->query($result4);
                    $row4 = $MyRow4->fetch_assoc();
                    $actionBy = $row4["owner"];


                    $resultusr = "SELECT RFQID FROM rfq WHERE MSRID='$MSRID' AND NOPO='No'  ";
                    $MyRowusr = $connn->query($resultusr);
                    $rowusr = $MyRowusr->fetch_assoc();
                    $rfqcount = mysqli_num_rows($MyRowusr);
                    if ($rfqcount > 0) {
                        $chkk = 1;
                    }

                    $resultusr4 = "SELECT POID FROM po WHERE MSRID='$MSRID'  ";
                    $MyRowusr4 = $connn->query($resultusr4);
                    $rowusr4 = $MyRowusr4->fetch_assoc();
                    $rfqcount4 = mysqli_num_rows($MyRowusr4);
                    if ($rfqcount4 > 0) {
                        $chkk = 1;
                    }

                    $resultusr1 = "SELECT MSRID FROM contract WHERE MSRID='$MSRID'  ";
                    $MyRowusr1 = $connn->query($resultusr1);
                    $rowusr1 = $MyRowusr1->fetch_assoc();
                    $rfqcount1 = mysqli_num_rows($MyRowusr1);
                    if ($rfqcount1 > 0) {
                        $chkk = 1;
                    }
                    if ($chkk == 1) {
                        continue;
                    }
                    ?>
                    <tr>
                        <td>
                            <?php echo $vo; ?>
                        </td>
                        <td>
                            <?php echo $row0["MSRID"]; ?>
                        </td>
                        <td>
                            <?php echo $row0["MSRType"]; ?>
                        </td>
                        <td>
                            <?php echo $row0["purposeofbuying"]; ?>
                        </td>
                        <td>
                            <?php echo depName($row0["DepRequester"]); ?>
                        </td>
                        <td>
                            <?php echo $row0["RequestDate"]; ?>
                        </td>
                        <td>
                            <?php echo reqName($row0["RequestPer"]); ?>
                        </td>
                        <td>
                            <?php echo reqName($actionBy); ?>
                        </td>
                    </tr>
                    <?php
                    $vo++;
                }
            }
            ?>
        </tbody>
    </table>
</div>
</div>

Привет, Пакандж. Можете ли вы предоставить структуру своей таблицы?

Keval Pithva 07.05.2018 13:18
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
111
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать метод подзапроса вместо цикла.

Пример:

 $sql = "SELECT  *,
        ( SELECT  owner
            FROM  tracking
            WHERE  tracking.MSRID= msr.MSRID
        ) AS _owner, 
        ( SELECT  RFQID
            FROM  rfq
            WHERE  rfq.MSRID= msr.MSRID
              AND  rfq.NOPO='No'
        )  AS _RFQID
    FROM  msr
    WHERE  rfq.Status ='Approved'";

(Во втором подзапросе отсутствовали скобки.)

Rick James 19.05.2018 05:02

Другие вопросы по теме