Подсчет количества 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), и для каждой группы подсчитывается количество записей. Затем, итоговое количество записей для каждой группы выводится в результирующем наборе данных.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д