powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
18 сообщений из 18, страница 1 из 1
Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
    #38945211
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В поиске меряю только в раиусе 100км. Это константа не будет меняться.

Меряю расстояние с координат X,Y. И ставлю ограничение в поиске в радиусе 100км. В базе данных все населенные пункты и координаты.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT ( 111 * SQRT( (
POW(  `X` , 2 ) ) - ( X_ОткудаМеряем^2 ) ) + ( (
POW(  `Y` , 2 ) ) - ( Y_ОткудаМеряем^2 )
)
) AS  'S', X, Y, NmMisto
FROM  `reg4` 
WHERE ((Not (`X`) Is Null) AND (`X` < X_ОткудаМеряем+1 ) AND (`X` > X_ОткудаМеряем-1) AND (`Y` < Y_ОткудаМеряем+1 ) AND (`Y` > Y_ОткудаМеряем-1 ) AND (
Если повторю еще раз формулу, то код исполняется за 0,017 в сравнении с 0,0038
)
ORDER BY S



А так как у меня практики с SQL (аналитика, статистика) еще нет, то может быть быстрей будет работать если
комплириую готовую таблицу с перечнем подчиненных записей ?
к примеру
табл_Который пункт_интересует >>>> табл_ключи_результатов >>>> Табл_Населенных_пунктов
...
Рейтинг: 0 / 0
Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
    #38945214
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
координаты в каком виде хранятся? градусы, метры?
...
Рейтинг: 0 / 0
Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
    #38945218
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да и формула какая-то странная. Отдельные буквы вроде похожи на правду, но вся формула - нет.
...
Рейтинг: 0 / 0
Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
    #38945221
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей159,

че-то как-то не по Пифагору меряешь... что за систему используешь?
...
Рейтинг: 0 / 0
Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
    #38945225
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblabче-то как-то не по Пифагору меряешь... что за систему используешь?
вы правы. ошибся. надо разницу в квадрат поднести, а не каждое число. с BD Access переписывал и пока искал POW() вместо ^2 (как в почти у всех языках) протупил.
...
Рейтинг: 0 / 0
Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
    #38945227
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bochkovкоординаты в каком виде хранятся? градусы, метры?
В градусах. Координаты слил с Яндекс карты, заодно перевел на два языка, заодно сохранил прилагательную форму населенного пункта, чтобы добавить только слово "район"
...
Рейтинг: 0 / 0
Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
    #38945234
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT ( 111 * SQRT( POW(  `X`-23.54048 , 2 )  + 

( POW(  `Y`-49.30871 , 2 )) )) AS  'S', X, Y, 

NmMisto
FROM  `reg4` 
WHERE ((Not (`X`) Is Null) AND (`X` < 24.54048 ) 

AND (`X` > 22.54048) AND (`Y` < 50.30871 ) AND 

(`Y` > 48.30871 ) AND (S<100) )
ORDER BY S



Вопрос о WHERE и переменной S. Тоесть я должен снова дублировать формулу ? Нельзя както переменную AS 'S' использовать в условии. Чудесно что хоть ORDER BY S работает, хотя в Access так и не заработала
...
Рейтинг: 0 / 0
Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
    #38945235
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В данном случае (как выше описал) ругается:
#1054 - Unknown column 'S' in 'where clause'
...
Рейтинг: 0 / 0
Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
    #38945236
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если формулу дублирую в условии, то результат исполняется за 0.0083 сек
Как думаете отдельная таблица табл_ключи_результатов >>>> Табл_Населенных_пунктов будет работать быстрей ?
И о переменной `S` в условии дайте ответ. Нужно по другому как-то записать или только еще раз формулу копировать туда ?
...
Рейтинг: 0 / 0
Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
    #38945257
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей159Вопрос о WHERE и переменной S. Тоесть я должен снова дублировать формулу ? Нельзя както переменную AS 'S' использовать в условии.В WHERE нельзя, но можно в HAVING.
И кавычки у алиаса 'S' должны быть другие - как у остальных объектов БД или вовсе никаких.
...
Рейтинг: 0 / 0
Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
    #38945261
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей159,
1) я бы тоже ругалась: сравниваете градусы с километрами...
2) что в идеале запрос должен вернуть? простыми словами?

miksoft,
что проверяет это условие?
Код: sql
1.
(Not (`X`) Is Null)
...
Рейтинг: 0 / 0
Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
    #38945263
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab1) я бы тоже ругалась: сравниваете градусы с километрами...
2) что в идеале запрос должен вернуть? простыми словами?

miksoft,
что проверяет это условие?
Код: sql
1.
(Not (`X`) Is Null)



1. Градусы умножаю на коэффициент 111 и получаем км. На небольшой карте погрешность меня устраивает и формулы Пифагора достаточно.
2. Базу данных городов полностью слил с соц.сети ВК.
Когда подгружал с Яндек-карты координаты, то оказалось, что у ВК на пару тысяч населенных пунктов больше и Яндекс-карта не распознает село, и координаты=Null. Уничтожать лишнее было жалко.
...
Рейтинг: 0 / 0
Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
    #38945266
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab, Спасибо. Идеально подходит.
Код: sql
1.
2.
3.
4.
SELECT ( 111 * SQRT( POW(  `X`-23.54048 , 2 )  + ( POW(  `Y`-49.30871 , 2 )) )) AS  S, X, Y, NmMisto
FROM  `reg4` 
HAVING (S<100)
ORDER BY S



Дополнительные WHERE: <X2+1 AND >X2-1 AND <Y2+1 AND >Y2-1 в условии ставил, думал, что смогу быстрей отсеять пустые просчеты, так как ищу круг совпадений в радиусе 100км. А разница +1 или -1 в драдусе = +-111 км. Логично должно быть сначала проверка условия в WHERE, а потом уже формирования вывода запроса и заодно просчет формулы. Поэтому я себе представил, что компилятор MySQL проверит сначала условие, а потом возьмется за просчет и вывод.
...
Рейтинг: 0 / 0
Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
    #38945270
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblabmiksoft,
что проверяет это условие?
Код: sql
1.
(Not (`X`) Is Null)

NOT (X IS NULL)
Записано необычно, но синтаксически корректно.
...
Рейтинг: 0 / 0
Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
    #38945281
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab,
2) что в идеале запрос должен вернуть? простыми словами?
простыми словами клиент ищет партнера в своем округе, с сортировкой что к клиенту ближе
...
Рейтинг: 0 / 0
Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
    #38945308
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть у меня запрос, когдато делал по поиску точек в круге,
точки тоже как у тебя широта долгота, не геометрии,
запрос с учетом широты, чем севернее тем длина минуты меньше,
но скину в понедельник, не раньше
...
Рейтинг: 0 / 0
Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
    #38945418
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1.
miksoftВ WHERE нельзя, но можно в HAVING.

а почему ? насчет WHERE понятно, а по поводу HAVING я удивилась =)

2. по запросу:
если точные вычисления дистанции не нужны, а важен только порядок, то достаточно рассмотреть
(X0 - X)^2 + (Y0 - Y)^2

3. тест :-)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
CREATE TABLE IF NOT EXISTS cities 
(
    id VARCHAR(4) NOT NULL PRIMARY KEY,
    city VARCHAR(20) NOT NULL,
    x_lat DECIMAL(5,2),
    y_lon DECIMAL(5,2),
    INDEX( city(6) )

) ENGINE=INNODB;

INSERT INTO cities (id, city, x_lat, y_lon)
VALUES 
('PL01', 'City01', 10, 10),
('PL02', 'City02', 10.25, 11), 
('PL03', 'City03', 10.25, 10.1), 
('PL04', 'City04', 10.85, 10), 
('PL05', 'City05', 10.25, 11.2), 
('PL06', 'City06', 11, 9), 
('PL07', 'City07', 11.25, 9.25);

// PL03 as test city
SELECT t0.id as id0, t0.city as city0, t0.x_lat as x0 , t0.y_lon as y0,
       t1.id as id1, t1.city as city1, t1.x_lat as x1, t1.y_lon as y1, 
       (t0.x_lat - t1.x_lat)*(t0.x_lat - t1.x_lat) + (t0.y_lon -t1.y_lon)*(t0.y_lon -t1.y_lon) as dist
        
       FROM (SELECT * FROM cities WHERE id='PL03') t0, cities t1
       
       WHERE (t1.x_lat IS NOT NULL) AND (t1.y_lon IS NOT NULL) AND 
             (  (t0.x_lat - t1.x_lat)*(t0.x_lat - t1.x_lat) + (t0.y_lon -t1.y_lon)*(t0.y_lon -t1.y_lon) <= 1  )
       
       ORDER BY dist;
...
Рейтинг: 0 / 0
Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
    #38945423
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab1.
miksoftВ WHERE нельзя, но можно в HAVING.

а почему ? насчет WHERE понятно, а по поводу HAVING я удивилась =)HAVING выполняется сильно позже, после SELECT, ORDER BY и GROUP BY.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]