Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 09.03.2019
Сообщений: 2
MySQL

База данных сортировка, а потом групировка

21.02.2021, 21:00. Показов 642. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть запрос который выводит ближайшие объекты по широте и долготе
Code
1
2
3
4
5
6
7
8
9
10
11
Select id, lat, lon, name, type,
acos(sin(:lat)*sin(radians(lat)) + cos(:lat)*cos(radians(lat))*cos(radians(lon)-:lon)) * :R As D
From (
Select id, lat, lon, name, type
From `TABLE 254`
Where lat Between :minLat And :maxLat
And lon Between :minLon And :maxLon
) As FirstCut
WHERE acos(sin(:lat)*sin(radians(lat)) + cos(:lat)*cos(radians(lat))*cos(radians(lon)-:lon)) * :R < :rad
Group by `type`
Order by `D`
Получаем следующее

Гостагаевская aerodrome 18 км
Остановка bus_stop 31 км
Баканская station 44 км
17 км halt 47 км

Проблема в том что полученые записи не являются самыми ближайшими, так как Group by группирует по первой записи

Без Group by `type`
Музыкальная школа bus_stop 0.267 км
Санаторий «Русь» bus_stop 0.305 км
ул. Крепостная bus_stop 0.308 км
ул. Крепостная bus_stop 0.320 км

Подскажите, что изменить в запросе, чтобы сначало происходила сортировка по D, а потом групировка по type
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.02.2021, 21:00
Ответы с готовыми решениями:

Сортировка, групировка и подсчет дат с использованием Stream API
/* * Посчитать общее число понедельников за заданные годы с группировкой по месяцам */ EnumMap&lt;Month, Long&gt;...

Сортировка списка: положительные по возрастанию, потом нули, потом отрицательные по убыванию
Здраствуйте. Помогите пожайлуста написать программу на swi-prolog которая сортирует список чисел. Положительные по возрастанию, потом чтобы...

Сортировка массива: сначала положительные числа по убыванию, потом отрицательные по возрастанию, потом нули
Заполнить массив рандомными числами от -100 включительно до 100 включительно. Отсортировать так: сначала идут положительные числа по...

3
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
21.02.2021, 23:11
Цитата Сообщение от 2mur Посмотреть сообщение
Проблема в том что полученые записи не являются самыми ближайшими, так как Group by группирует по первой записи
Не первую, а какую mysql захочет, такую и возьмёт использовать
Если используется GROUP BY, то в списке полей в SELECT следует использовать либо те, что указаны в GROUP BY, либо использовать агрегатные функции. Если использовать поле не указанное в GROUP BY - то это ошибка. Если mysql делает вид, что это не ошибка, то нужно включить вот эту штуку
0
0 / 0 / 0
Регистрация: 09.03.2019
Сообщений: 2
23.02.2021, 10:19  [ТС]
Может какую и захочет но в моем запросе GROUP выводит первую запись
Вот пример
С Group by type и Order by D

name type
Остановка bus_stop 31.472 км
Баканская station 44.109 км
17 км halt 47.006 км

Без Group by type и Order by D

Баканская station 44.109 км
Киевский station 49.927 км
Анапа station 6.831 км
17 км halt 47.006 км
805 км halt 38.751 км
Убых halt 28.439 км
Остановка bus_stop 31.472 км
Алексино bus_stop 45.838 км
Центр bus_stop 22.668 км

Без Group by type

Анапа station 6.831 км
Центр bus_stop 22.668 км
Убых halt 28.439 км
Остановка bus_stop 31.472 км
805 км halt 38.751 км
Баканская station 44.109 км
Алексино bus_stop 45.838 км
17 км halt 47.006 км
Киевский station 49.927 км

а нужно так

Анапа station 6.831 км
Центр bus_stop 22.668 км
Убых halt 28.439 км

И с агрегатными функциями ничего у меня не получется
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
23.02.2021, 11:56
Цитата Сообщение от 2mur Посмотреть сообщение
в моем запросе GROUP выводит первую запись
Твой запрос содержит ошибки. И если mysql их пропускает - это минус mysql, впрочем в новых версиях при правильной настройки mysql такое пропускать не будет

Лень разбираться в этом запросе, обычно такое делается примерно так: делается вложенный запрос с GROUP BY и к нему джойнится уже сама таблица
SQL
1
2
3
SELECT * FROM
(SELECT SOME_AGGREGATE_FUNCTIONS(some_field) AS `calc_field` FROM `table` GROUP BY `field_for_group_by`) AS `tmp`
JOIN `table` `t` ON ...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.02.2021, 11:56
Помогаю со студенческими работами здесь

Сравнение и групировка данных
Дано на входе список: , , , , , , , , ,

Сортировка по месяцу. База данных не работает
Здравствуйте, можете дать совет по этой программе, пожалуйста! Заранее спасибо. Условие нужно сортировка по месяцу. База данных не...

База данных, основанная на службах vs База данных SQL Server
Доброго времени суток. Делал я, значит, Data Access Layer для ASP.NET MVC проекта. Создал обычную библиотеку классов, моделей туда...

База данных об объектах, поиск объектов по признакам. База хранится в файле.
Задача состояла в следующем: Написать базу данных (программу) на Прологе, которая позволяет выбирать объекты по четырем признакам или любой...

Сортировка массива сначала положительные потом отрицательные
Преобразовать массив таким образом, чтобы сначала располагались все положительные элементы, а потом – все отрицательные (элементы, равные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru