Подсчет количества phone в уникальных именах - MySQL

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

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

Здравствуйте, есть таблица в которой нужно определить, сколько раз phone встретился в уникальных именах (т.е. без повторов имен). Внимание! Имя Миша повторяется 2 раза.
id name phone
1 Сережа 07
2 Коля 03
3 Даша 07
4 Валя 02
5 Миша 02
6 Лера 04
7 Сара 02
8 Миша 02
Я сделал такое с помощью циклов в php, но с большим количеством обращений к БД.
$query2 = "SELECT `id`, `name`, `phone` FROM `table` ORDER BY id DESC LIMIT 8"; // Запрос последних 8 id и name
$result2 = mysqli_query($bd_link, $query2);
while ($row2 = mysqli_fetch_assoc($result2)) { // Получаю первый телефон
    $array = array(); // Пустой массив
    $k = 0; // Счетчик 
    $query3 = "SELECT `name`, `phone` FROM `table` WHERE phone='".$row2['phone']."'";
    $result3 = mysqli_query($bd_link, $query3);
    while ($row3 = mysqli_fetch_assoc($result3)) { // Нахожу первое имя
        if (!in_array($row3['name'], $array, true)) { // Если нет имени в массиве, 
            $array[] = $row3['name']; // то записываю в него.
            $k++; // Счетчик +1
        }
        $r[$i]['count'] =  "$row2['phone'] встретился $k раз в уникальном имени";
    }
    unset($array); // Удаляю массив, вроде даже не нужно
    mysqli_free_result($result3);
    $i++;
}
mysqli_free_result($result2);
print_r($r);
Ответом будет: 02 встретился 3 раза в уникальном имени, 04 встретился 1 раз в уникальном имени, 02 встретился 3 раза в уникальном имени, 02 встретился 3 раза в уникальном имени, 07 встретился 2 раза в уникальном имени, 03 встретился 1 раз в уникальном имени, 02 встретился 3 раза в уникальном имени, 07 встретился 2 раза в уникальном имени. Можно ли реализовать то же самое, но с условием в самом запросе, ну или хотя бы с помощью 1-2 обращений к БД?

Решение задачи: «Подсчет количества phone в уникальных именах»

textual
Листинг программы
SELECT COUNT(NN), NN FROM (SELECT DISTINCT TABLE_NAME.name, TABLE_NAME.phone AS NN FROM TABLE_NAME) GROUP BY NN

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

В этом коде используется подзапрос, который выбирает уникальные имена и номера телефонов из таблицы TABLE_NAME. Затем, результаты этого подзапроса группируются по номеру телефона (NN), и для каждой группы подсчитывается количество записей. Затем, итоговое количество записей для каждой группы выводится в результирующем наборе данных.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

8   голосов , оценка 4 из 5
Похожие ответы