Я работаю с php и oracle, чтобы получить данные из базы данных oracle и появиться в таблице php с кодом php, подключившись к базе данных oracle. Проблема в том, что я получаю данные после долгого времени, пока у меня есть цикл for для запуска другого запроса. Сначала я выполнил запрос, который дает мне полную карту, выпущенную до 23/11/2019 (дата, которую я назначил в запросе), и этот запрос также дает все карты, отмененные с 23/11/2019 по 25/11/2019, здесь ниже запроса в php с oci_excecute ()
$stid = oci_parse($conn, "
select
(count(till_today_card_issued) - today_total_canceled) as till_today_card_issued,
today_total_canceled
from
(
SELECT
eofficeuat.cardprintlog_cpa.empid as till_today_card_issued,
(
select count(eofficeuat.cardprintlog_cpa.empid)
from
eofficeuat.cardprintlog_cpa
where
eofficeuat.cardprintlog_cpa.cardstatus='DISCARDED'
and eofficeuat.cardprintlog_cpa.dateofissue BETWEEN TO_DATE('23/11/2019', 'dd/mm/yyyy') AND TO_DATE('25/11/2019', 'dd/mm/yyyy')
) as today_total_canceled
FROM
eofficeuat.cardprintlog_cpa
)
group by today_total_canceled
"
);
oci_execute($stid);
и здесь ниже код для выборки данных
$TILL_TODAY_CARD_ISSUED = 0;
$TODAY_TOTAL_CANCELED = 0;
while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS))
{
$TILL_TODAY_CARD_ISSUED = $row['TILL_TODAY_CARD_ISSUED'];
$TODAY_TOTAL_CANCELED = $row['TODAY_TOTAL_CANCELED'] ;
}
Теперь я хотел написать еще один запрос, который может дать общее количество карточек перевыпуска, но условие состоит в том, что сотрудник ранее отменил карточку и снова выполнил ее в период с 23/11/2019 по 25/11/2019. для этого я сделал следующий код
$canceled_query = oci_parse($conn, "
select eofficeuat.cardprintlog_cpa.empid
from
eofficeuat.cardprintlog_cpa
where
eofficeuat.cardprintlog_cpa.cardstatus='DISCARDED'
");
oci_execute($canceled_query);
$emp = array();
while ($row = oci_fetch_array($canceled_query, OCI_ASSOC+OCI_RETURN_NULLS))
{
$emp[] = $row['EMPID'];
}
$rissue_emp = array();
for($i=0; $i<sizeof($emp); $i++){
$rquery = oci_parse($conn, "
select eofficeuat.cardprintlog_cpa.empid
from
eofficeuat.cardprintlog_cpa
where
eofficeuat.cardprintlog_cpa.cardstatus='READY'
and eofficeuat.cardprintlog_cpa.dateofissue BETWEEN
TO_DATE('23/11/2019', 'dd/mm/yyyy') AND TO_DATE('25/11/2019', 'dd/mm/yyyy')
and eofficeuat.cardprintlog_cpa.empid='". $emp[$i] ."'
");
oci_execute($rquery);
while ($row = oci_fetch_array($rquery, OCI_ASSOC+OCI_RETURN_NULLS)){
$rissue_emp[] = $row['EMPID'];
}
}
и, наконец, отобразил данные в таблице php
echo "<tr>";
echo "<td>Port Staff</td>";
echo "<td>". $TILL_TODAY_CARD_ISSUED ."</td>";
echo "<td>". $TODAY_TOTAL_CANCELED ."</td>";
echo "<td>". sizeof($rissue_emp) ."</td>";
echo "</tr>";
Теперь проблема в том, что есть цикл for, выполняющий запрос до размера массива, который принимаетмного времени и я получаю результат после долгого времени. Подскажите, пожалуйста, как я могу сделать это быстро, чтобы получить результат? Спасибо