Задать вопрос
vanesxl
@vanesxl

Как оптимизировать php + mysql код?

Здравствуйте,
У меня есть 2 таблицы,
В первой таблице lpu_nsi хранятся организации и их подразделения, у них у всех одинаковый номер кода mo_code
Во второй таблице хранятся люди, номера кода mo_code организаций куда они обращались и номер подразделение организации в конкретно которое они обращались.
Мне нужно как то узнать список куда обращались люди, а куда нет, за это у меня отвечает переменная $param
написал вот такой код:
include ("connect.php");
$rez = mysqli_query($db,"SELECT mo_code, nompod, name_short FROM lpu_nsi");  //получаем список всех организаций и их подразделений
while ($nsi = mysqli_fetch_array($rez)){ //начинаем обход каждой записи
    $rz = mysqli_query($db, "SELECT COUNT(pa.id) AS nummo FROM patints_attachment pa WHERE pa.mo_code='$nsi[mo_code]' AND pa.nompod='$nsi[nompod]'"); // получаю число людей которые обратились в конкретное подразделение
    $count = mysqli_fetch_array($rz);
    if($param==1 and $count['nummo'] == 0){
        echo "<li role=\"presentation\">$nsi[name_short]</li>"; // вывожу если мне необходимо получить только те организации, куда никто не обращался
    }
    if($param==2 and $count['nummo'] != 0){
        echo "<li>$nsi[name_short]</li>"; // Вывожу если необходимо получить только те организации, куда обращались люди
    }
}

Получается я делаю отдельный запрос для каждой записи в первой таблице, мне это решение не нравится и оно очень медленное так как записей в первой таблице 650, а во второй 800 000 и записей во второй таблице может быть еще больше, раза в 2.
Как можно мой код оптимизировать? Хотелось бы это все сделать 1 запросом в бд, а в цикле просто вывести список тех что мне вернуло MySQL, но вот как это сделать?
  • Вопрос задан
  • 215 просмотров
Подписаться 1 Оценить 9 комментариев
Пригласить эксперта
Ответы на вопрос 1
MaxDukov
@MaxDukov
впишусь в проект как SRE/DevOps.
что-то мне подсказывает, что Вас должен устроить Select с Join. Что-то типа:
SELECT COUNT(pa.id) as nummo, nsi.name_short FROM lpu_nsi nsi,  patints_attachment pa  WHERE pa.mo_code=nsi.mo_code AND pa.nompod=nsi.nompod GROUP BY nsi.name_short
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы