Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П / 18 сообщений из 18, страница 1 из 1
25.04.2015, 14:07:07
    #38945211
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
В поиске меряю только в раиусе 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
25.04.2015, 14:17:25
    #38945214
bochkov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
координаты в каком виде хранятся? градусы, метры?
...
Рейтинг: 0 / 0
25.04.2015, 14:33:39
    #38945218
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
Да и формула какая-то странная. Отдельные буквы вроде похожи на правду, но вся формула - нет.
...
Рейтинг: 0 / 0
25.04.2015, 14:39:51
    #38945221
mini.weblab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
Андрей159,

че-то как-то не по Пифагору меряешь... что за систему используешь?
...
Рейтинг: 0 / 0
25.04.2015, 14:56:10
    #38945225
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
mini.weblabче-то как-то не по Пифагору меряешь... что за систему используешь?
вы правы. ошибся. надо разницу в квадрат поднести, а не каждое число. с BD Access переписывал и пока искал POW() вместо ^2 (как в почти у всех языках) протупил.
...
Рейтинг: 0 / 0
25.04.2015, 14:58:53
    #38945227
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
bochkovкоординаты в каком виде хранятся? градусы, метры?
В градусах. Координаты слил с Яндекс карты, заодно перевел на два языка, заодно сохранил прилагательную форму населенного пункта, чтобы добавить только слово "район"
...
Рейтинг: 0 / 0
25.04.2015, 15:11:07
    #38945234
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
Код: 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
25.04.2015, 15:12:07
    #38945235
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
В данном случае (как выше описал) ругается:
#1054 - Unknown column 'S' in 'where clause'
...
Рейтинг: 0 / 0
25.04.2015, 15:18:47
    #38945236
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
Если формулу дублирую в условии, то результат исполняется за 0.0083 сек
Как думаете отдельная таблица табл_ключи_результатов >>>> Табл_Населенных_пунктов будет работать быстрей ?
И о переменной `S` в условии дайте ответ. Нужно по другому как-то записать или только еще раз формулу копировать туда ?
...
Рейтинг: 0 / 0
25.04.2015, 16:12:09
    #38945257
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
Андрей159Вопрос о WHERE и переменной S. Тоесть я должен снова дублировать формулу ? Нельзя както переменную AS 'S' использовать в условии.В WHERE нельзя, но можно в HAVING.
И кавычки у алиаса 'S' должны быть другие - как у остальных объектов БД или вовсе никаких.
...
Рейтинг: 0 / 0
25.04.2015, 16:20:59
    #38945261
mini.weblab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
Андрей159,
1) я бы тоже ругалась: сравниваете градусы с километрами...
2) что в идеале запрос должен вернуть? простыми словами?

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

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



1. Градусы умножаю на коэффициент 111 и получаем км. На небольшой карте погрешность меня устраивает и формулы Пифагора достаточно.
2. Базу данных городов полностью слил с соц.сети ВК.
Когда подгружал с Яндек-карты координаты, то оказалось, что у ВК на пару тысяч населенных пунктов больше и Яндекс-карта не распознает село, и координаты=Null. Уничтожать лишнее было жалко.
...
Рейтинг: 0 / 0
25.04.2015, 16:51:04
    #38945266
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
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
25.04.2015, 16:55:56
    #38945270
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
mini.weblabmiksoft,
что проверяет это условие?
Код: sql
1.
(Not (`X`) Is Null)

NOT (X IS NULL)
Записано необычно, но синтаксически корректно.
...
Рейтинг: 0 / 0
25.04.2015, 17:18:04
    #38945281
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
mini.weblab,
2) что в идеале запрос должен вернуть? простыми словами?
простыми словами клиент ищет партнера в своем округе, с сортировкой что к клиенту ближе
...
Рейтинг: 0 / 0
25.04.2015, 19:22:46
    #38945308
bochkov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
есть у меня запрос, когдато делал по поиску точек в круге,
точки тоже как у тебя широта долгота, не геометрии,
запрос с учетом широты, чем севернее тем длина минуты меньше,
но скину в понедельник, не раньше
...
Рейтинг: 0 / 0
26.04.2015, 00:17:55
    #38945418
mini.weblab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
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
26.04.2015, 00:23:35
    #38945423
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как задать условие на динамическую переменную (select (формула) AS Переменная .... WHERE П
mini.weblab1.
miksoftВ WHERE нельзя, но можно в HAVING.

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


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