Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как работать с значением из другой строки, как с столбцом их текущей? / 12 сообщений из 12, страница 1 из 1
06.03.2013, 19:51
    #38176595
Scarzie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работать с значением из другой строки, как с столбцом их текущей?
Здравствуйте. Есть задача, которая кажется мне не под силу, помогите пожалуйста.
Нужно работать со значением из другой строки так, как будто это столбец из текущей строки. Сконструировать так базу не позволяет структура используемой CMS.
Вот пример базы (№1):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
+------+--------+------------+-------+
| id   |  type  |document_id | value |
+------+--------+------------+-------+
|   1  |    x   |     3      | 2235  |
+------+--------+------------+-------+
|   2  |    y   |     3      | 1313  |
+------+--------+------------+-------+
|   3  |    x   |     4      | 242   |
+------+--------+------------+-------+
|   4  |    y   |     4      | 525   |
+------+--------+------------+-------+


Как можно работать с этой базой (№1) так, как будто если б она выглядела вот так (№2):
Код: sql
1.
2.
3.
4.
5.
6.
7.
+------+-------------+---------+--------+
| id   | document_id |    x    |    y   | 
+------+-------------+---------+--------+
|   1  |      3      |  2235   |  1313  |
+------+-------------+---------+--------+
|   1  |      4      |  242    |  525   |
+------+-------------+---------+--------+


Пример запроса в базу не могу привести, поскольку он будет очень большим и со сложными математическими функциями (расчет близости координат).
Вот пример как бы я работал с базой №2:
Код: sql
1.
2.
SELECT `document_id`, (`x +`y`) AS `x_plus_y` 
FROM `modx_site_tmplvar_contentvalues`


А как мне работать точно также с базой №1, т.е. чтобы в SELECT подставлялись нужные мне поля из других строк?
Надеюсь понятно изложил суть вопроса, очень ожидаю помощи.
Большое спасибо.
...
Рейтинг: 0 / 0
06.03.2013, 20:00
    #38176610
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работать с значением из другой строки, как с столбцом их текущей?
ScarzieСконструировать так базу не позволяет структура используемой CMS.

нуу, человек который писал эту CMS, НЕ страдал "экселем головного мозга",
за что ему только "спасибо" нужно сказать, даа...

---
ScarzieВот пример как бы я работал с базой №2:
Код: sql
1.
2.
SELECT `document_id`, (`x +`y`) AS `x_plus_y` 
FROM `modx_site_tmplvar_contentvalues`



Код: sql
1.
2.
3.
select document_id, sum(value)
from t
group by document_id
...
Рейтинг: 0 / 0
06.03.2013, 20:15
    #38176627
Scarzie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работать с значением из другой строки, как с столбцом их текущей?
Спасибо за ответ. Да, в конкретно описанном мною запросе - Ваше решение подходит как нельзя лучше, но к сожалению в моем запросе оно работать не будет.
Мне нужно чтобы в SELECT вместо `x` и `y` подставлялись значения из строк, и мне кажется - тут без вариантов.
CMS modx, в разных строках будет храниться широта и долгота.
На всякий случай покажу как будет приблизительно выглядеть запрос, но вряд ли кому-то захочется в нем разбираться:
Код: sql
1.
2.
3.
4.
5.
SELECT `document_id`,
(6371 * acos( cos( radians(широта) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(долгота) ) + sin( radians(широта) ) * sin( radians( lat ) ) ) ) AS `distance`
FROM `table`
ORDER BY `distance`
LIMIT 0 , 50


и вот тут мне нужно чтобы `lat` и `lng` были не столбцами в одной строке, а значениями из разных строк...
...
Рейтинг: 0 / 0
06.03.2013, 20:54
    #38176664
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работать с значением из другой строки, как с столбцом их текущей?
можете вот такое view сделать и использовать его в запросах там где нужна таб.в таком "пивотном" виде
Код: sql
1.
2.
3.
select t1.`document_id`, t1.value  as x, t2.value  as y 
from `table` t1 inner join`table` t2 on t1.`document_id`=t2.`document_id`
where t1.type = 'x' and t2.type = 'y'



или сразу подзапросом в итоговом запросе
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT `document_id`,
(6371 * acos( cos( radians(широта) ) * cos( radians( x) ) * cos( radians( y) - radians(долгота) ) + sin( radians(широта) ) * sin( radians( y) ) ) ) AS `distance`
FROM 

  (select t1.`document_id`, t1.value  as x, t2.value  as y 
  from `table` t1 inner join`table` t2 on t1.`document_id`=t2.`document_id`
  where t1.type = 'x' and t2.type = 'y') exl

ORDER BY `distance`
LIMIT 0 , 50
...
Рейтинг: 0 / 0
07.03.2013, 00:25
    #38176776
Scarzie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работать с значением из другой строки, как с столбцом их текущей?
qwerty112, БОЛЬШОЕ, ГИГАНТСКОЕ СПАСИБО!
В итоге запрос для modx Evo вышел таким, может кому пригодится:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT `contentid`,
(6371 * acos( cos(radians(широта) ) * cos( radians(`lat`) ) * cos( radians(`lng`) - radians(долгота) ) + sin( radians(широта) ) * sin( radians(`lat`) ) ) ) AS `distance`
FROM 
	(SELECT `t1`.`contentid`, `t1`.`value` AS `lat`, `t2`.`value` AS `lng`
	FROM `modx_site_tmplvar_contentvalues` AS `t1`
	INNER JOIN `modx_site_tmplvar_contentvalues` AS `t2`
	ON `t1`.`contentid`=`t2`.`contentid`
	WHERE `t1`.`tmplvarid`='id tv параметра широты' AND `t2`.`tmplvarid`='id tv параметра долготы') AS t3
ORDER BY `distance`
LIMIT 0 , 50


Возвращает номера документов и расстояние в киломтерах (по увеличению) от указаной широты/долготы.
Еще раз спасибо.
...
Рейтинг: 0 / 0
07.03.2013, 05:09
    #38176832
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работать с значением из другой строки, как с столбцом их текущей?
Scarzie, в сторону mysql spatial extensions не смотрели, чтобы не писать все эти формулы?
...
Рейтинг: 0 / 0
07.09.2013, 19:11
    #38390078
Scarzie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работать с значением из другой строки, как с столбцом их текущей?
tanglir , знаю что уже прошло пол года с момента последнего сообщения, извиняюсь что не ответил, все время хотел разобраться с ними, но никак времени не было.
Скажите пожалуйста, а чем spatial extensions в данном случае могут помочь (упростить), ведь вроде как в них нет готовых функций, придется делать все те же вычисления, разве нет?
Еще раз извиняюсь, спасибо.
...
Рейтинг: 0 / 0
08.09.2013, 07:17
    #38390213
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работать с значением из другой строки, как с столбцом их текущей?
Scarzie, ну вот, например:

http://stackoverflow.com/questions/1006654/fastest-way-to-find-distance-between-two-lat-long-points

Суть: быстро найти все точки в "квадрате" с заданной стороной (прикиньте сами длину стороны, чтобы их там 50+ всегда находилось), после этого "обычным" методом найти для них расстояния.
...
Рейтинг: 0 / 0
08.09.2013, 11:07
    #38390233
Scarzie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работать с значением из другой строки, как с столбцом их текущей?
tanglir , спасибо. Т.е. в SELECT по прежнему надо писать формулу, которая высчитывает расстояние до точки:
Код: sql
1.
SELECT `name`, (6371 * acos( cos(radians(широта) ) * cos( radians(`lat`) ) * cos( radians(`lng`) - radians(долгота) ) + sin( radians(широта) ) * sin( radians(`lat`) ) ) ) AS `distance`


а в WHERE надо использовать функции Spatial Extensions, для того чтобы быстро отобрать все точки в квадрате (допустим на расстоянии 20 км)?
Т.е. использовать Spatial Extansions надо только для того, чтобы сильно выиграть в производительности, верно?
...
Рейтинг: 0 / 0
09.09.2013, 04:57
    #38390600
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работать с значением из другой строки, как с столбцом их текущей?
Scarzie, ну да. Не знаю, сильно ли поможет, но попробовать ст о ит.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
04.05.2021, 17:33
    #40068390
MaNuNa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работать с значением из другой строки, как с столбцом их текущей?
Доброго времени суток, уважаемые! )
У меня вот похожая задачка, но не могу сообразить как применить данную формулу в MySQL.
Мне нужно по списку координат вычислить общее пройденное расстояние желательно в км, или метрах за заданный отрезок времени..

SELECT SUM (Тут я так понимаю нужно вставить перевод Широты и Долготы в км или метры поля `Latitude` , `Longitude` хранятся в типе Float)
FROM `data`
WHERE `ID_Dev` = 1 and
`DateTime` BETWEEN '2021-05-04 08:00:00' AND '2021-05-04 20:00:00'

Кто то может мне помочь сформировать MySQL запрос чтобы эта формула обработала координаты и выдала общее суммарное расстояние?
...
Рейтинг: 0 / 0
04.05.2021, 19:26
    #40068411
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работать с значением из другой строки, как с столбцом их текущей?
MaNuNa
У меня вот похожая задачка
Совершенно непохожая. Создавайте отдельную тему.

Если коротко - сборка всех координат в один объект тип MILTILINE и получение его длины.
Spatial Analysis Functions
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как работать с значением из другой строки, как с столбцом их текущей? / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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