Несколько запросов в одной таблице - MySQL

Узнай цену своей работы

Формулировка задачи:

Как вывести несколько запросов в таблицу, при том что условие везде разное, с группировкой.
$sql  = $db->query("SELECT propiska_ter, COUNT(*) AS count FROM nabor_2015  GROUP BY propiska_ter");
$sql2 = $db->query("SELECT propiska_ter, COUNT(*) AS count2 FROM nabor_2015 WHERE forma='Очная'  GROUP BY propiska_ter");

echo '<table>';
 
      echo '<tr>';
             echo '<th class="oplata2">Кол-во студентов</th>';
             echo '<th class="oplata2">Очная форма</th>';
      echo '</tr>';

   while($result = $sql->fetch_assoc()) {
 
       echo '<tr>';
           echo '<td class="fas"><a href="index.php?options=edit&id='.$result['propiska_ter'].'">'.$result['count'].'</a></td>';
           echo '<td class="fas"><a href="index.php?options=edit&id='.$result['propiska_ter'].'">'.$result['count2'].'</a></td>';
       echo '</tr>';
   }
 
echo '</table>';

Решение задачи: «Несколько запросов в одной таблице»

textual
Листинг программы
SELECT propiska_ter, t.count_1, f.count_2 
FROM (SELECT propiska_ter AS ter, COUNT(*) AS count_1 FROM nabor_2015 GROUP BY propiska_ter) t
LEFT JOIN (SELECT propiska_ter AS ter, COUNT(*) AS count_2 FROM nabor_2015 WHERE forma = 'Очная' GROUP BY propiska_ter) f
ON t.ter = f.ter

Объяснение кода листинга программы

В этом коде происходит объединение (JOIN) двух предварительно подсчитанных таблиц, используя оператор LEFT JOIN. Первая таблица (t) содержит количество записей для каждого propiska_ter в таблице nabor_2015. Вторая таблица (f) содержит количество записей для каждого propiska_ter в таблице nabor_2015, где форма обучения 'Очная'. Затем результаты объединяются по полю propiska_ter. В итоге получается список propiska_ter, их общее количество и количество для формы обучения 'Очная'.

Оцени полезность:

5   голосов , оценка 4 из 5