powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как работать с значением из другой строки, как с столбцом их текущей?
12 сообщений из 12, страница 1 из 1
Как работать с значением из другой строки, как с столбцом их текущей?
    #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
Как работать с значением из другой строки, как с столбцом их текущей?
    #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
Как работать с значением из другой строки, как с столбцом их текущей?
    #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
Как работать с значением из другой строки, как с столбцом их текущей?
    #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
Как работать с значением из другой строки, как с столбцом их текущей?
    #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
Как работать с значением из другой строки, как с столбцом их текущей?
    #38176832
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Scarzie, в сторону mysql spatial extensions не смотрели, чтобы не писать все эти формулы?
...
Рейтинг: 0 / 0
Как работать с значением из другой строки, как с столбцом их текущей?
    #38390078
Scarzie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir , знаю что уже прошло пол года с момента последнего сообщения, извиняюсь что не ответил, все время хотел разобраться с ними, но никак времени не было.
Скажите пожалуйста, а чем spatial extensions в данном случае могут помочь (упростить), ведь вроде как в них нет готовых функций, придется делать все те же вычисления, разве нет?
Еще раз извиняюсь, спасибо.
...
Рейтинг: 0 / 0
Как работать с значением из другой строки, как с столбцом их текущей?
    #38390213
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Scarzie, ну вот, например:

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

Суть: быстро найти все точки в "квадрате" с заданной стороной (прикиньте сами длину стороны, чтобы их там 50+ всегда находилось), после этого "обычным" методом найти для них расстояния.
...
Рейтинг: 0 / 0
Как работать с значением из другой строки, как с столбцом их текущей?
    #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
Как работать с значением из другой строки, как с столбцом их текущей?
    #38390600
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Scarzie, ну да. Не знаю, сильно ли поможет, но попробовать ст о ит.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как работать с значением из другой строки, как с столбцом их текущей?
    #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
Как работать с значением из другой строки, как с столбцом их текущей?
    #40068411
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaNuNa
У меня вот похожая задачка
Совершенно непохожая. Создавайте отдельную тему.

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


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