Подсчет количества phone в уникальных именах - MySQL
Формулировка задачи:
Здравствуйте, есть таблица в которой нужно определить, сколько раз phone встретился в уникальных именах (т.е. без повторов имен). Внимание! Имя Миша повторяется 2 раза.
Я сделал такое с помощью циклов в php, но с большим количеством обращений к БД.
Ответом будет:
02 встретился 3 раза в уникальном имени,
04 встретился 1 раз в уникальном имени,
02 встретился 3 раза в уникальном имени,
02 встретился 3 раза в уникальном имени,
07 встретился 2 раза в уникальном имени,
03 встретился 1 раз в уникальном имени,
02 встретился 3 раза в уникальном имени,
07 встретился 2 раза в уникальном имени.
Можно ли реализовать то же самое, но с условием в самом запросе, ну или хотя бы с помощью 1-2 обращений к БД?
id | name | phone |
1 | Сережа | 07 |
2 | Коля | 03 |
3 | Даша | 07 |
4 | Валя | 02 |
5 | Миша | 02 |
6 | Лера | 04 |
7 | Сара | 02 |
8 | Миша | 02 |
Листинг программы
- $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);
Решение задачи: «Подсчет количества 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), и для каждой группы подсчитывается количество записей. Затем, итоговое количество записей для каждой группы выводится в результирующем наборе данных.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д