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

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

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

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

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

textual
Листинг программы
  1. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы