powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Update направления движения
9 сообщений из 9, страница 1 из 1
Update направления движения
    #39710811
sql_new_58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

Помогите пожалуйста разобраться со следующей проблемой: есть таблица прохождения остановок общественным транспортом по времени, у конечных остановок есть критерий kon2 и кon1.


Код: 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.
CREATE TABLE `point` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `route` varchar(20) NOT NULL,
   `td` datetime NOT NULL,
  `point_name` text NOT NULL,
  `long` float(8,6) NOT NULL,
  `lat` float(8,6) NOT NULL,
  `krit` varchar(60) NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


INSERT INTO `point` VALUES (1, '1', 2018-09-28 06:35:17, 'Имя остановки1', 45.022999, 53.118999, 2352, 'kon1');
INSERT INTO `point` VALUES (2, '1', 2018-09-28 07:36:15, 'Имя остановки2', 45.022999, 53.124001, 2556, '');
INSERT INTO `point` VALUES (3, '1', 2018-09-28 08:35:13, 'Имя остановки3', 45.021999, 53.125999, 2577, '');
INSERT INTO `point` VALUES (4, '1', 2018-09-28 08:38:15, 'Имя остановки4', 45.021999, 53.132000, 2386, '' );
INSERT INTO `point` VALUES (5, '1', 2018-09-28 09:35:12, 'Имя остановки5', 45.021000, 53.136002, 2719, '' );
INSERT INTO `point` VALUES (6, '1', 2018-09-28 09:55:33, 'Имя остановки6', 45.021999, 53.139999, 2709, 'kon2');
INSERT INTO `point` VALUES (7, '1', 2018-09-28 10:24:35, 'Имя остановки5', 45.022160, 53.144268, 2799, '');
INSERT INTO `point` VALUES (8, '1', 2018-09-28 11:16:47, 'Имя остановки4', 45.016998, 53.147999, 2434, '');
INSERT INTO `point` VALUES (9, '1', 2018-09-28 12:28:28, 'Имя остановки3', 45.014999, 53.148998, 2432, '');
INSERT INTO `point` VALUES (10, '1', 2018-09-28 12:36:37, 'Имя остановки2', 45.020000, 53.157001, 2721, '');
INSERT INTO `point` VALUES (11, '1', 2018-09-28 13:20:17, 'Имя остановки1', 45.021000, 53.160000, 2727, 'kon1');
INSERT INTO `point` VALUES (12, '1', 2018-09-28 14:11:22, 'Имя остановки2', 45.022999, 53.124001, 2556, '');
INSERT INTO `point` VALUES (13, '1', 2018-09-28 15:02:57, 'Имя остановки3', 45.021999, 53.125999, 2577, '');
INSERT INTO `point` VALUES (14, '1', 2018-09-28 15:10:17, 'Имя остановки4', 45.021999, 53.132000, 2386, '');
INSERT INTO `point` VALUES (15, '1', 2018-09-28 15:35:37, 'Имя остановки6', 45.021000, 53.136002, 2719, 'kon2');



Я пытаюсь сделать UPDATE поля `krit`, если остановки расположены между kon1 и kon2, то `krit`='do ost 6', и наоборот, если между kon2 и kon1, то `krit`='do ost 1'.

К сожалению ничего не выходит. Подскажите пожалуйста, как это можно осуществить.
...
Рейтинг: 0 / 0
Update направления движения
    #39710829
paver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sql_new_58,
И где UPDATE?
И я в инсерте насчитал полей больше, чем в таблице
...
Рейтинг: 0 / 0
Update направления движения
    #39710836
sql_new_58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
paver, да, допущена мной ошибка. Должно быть так

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
INSERT INTO `point` VALUES (1, '1', 2018-09-28 06:35:17, 'Имя остановки1', 45.022999, 53.118999, 'kon1');
INSERT INTO `point` VALUES (2, '1', 2018-09-28 07:36:15, 'Имя остановки2', 45.022999, 53.124001, '');
INSERT INTO `point` VALUES (3, '1', 2018-09-28 08:35:13, 'Имя остановки3', 45.021999, 53.125999,  '');
INSERT INTO `point` VALUES (4, '1', 2018-09-28 08:38:15, 'Имя остановки4', 45.021999, 53.132000, '' );
INSERT INTO `point` VALUES (5, '1', 2018-09-28 09:35:12, 'Имя остановки5', 45.021000, 53.136002,  '' );
INSERT INTO `point` VALUES (6, '1', 2018-09-28 09:55:33, 'Имя остановки6', 45.021999, 53.139999,  'kon2');
INSERT INTO `point` VALUES (7, '1', 2018-09-28 10:24:35, 'Имя остановки5', 45.022160, 53.144268,  '');
INSERT INTO `point` VALUES (8, '1', 2018-09-28 11:16:47, 'Имя остановки4', 45.016998, 53.147999,  '');
INSERT INTO `point` VALUES (9, '1', 2018-09-28 12:28:28, 'Имя остановки3', 45.014999, 53.148998, '');
INSERT INTO `point` VALUES (10, '1', 2018-09-28 12:36:37, 'Имя остановки2', 45.020000, 53.157001,  '');
INSERT INTO `point` VALUES (11, '1', 2018-09-28 13:20:17, 'Имя остановки1', 45.021000, 53.160000,  'kon1');
INSERT INTO `point` VALUES (12, '1', 2018-09-28 14:11:22, 'Имя остановки2', 45.022999, 53.124001,  '');
INSERT INTO `point` VALUES (13, '1', 2018-09-28 15:02:57, 'Имя остановки3', 45.021999, 53.125999,  '');
INSERT INTO `point` VALUES (14, '1', 2018-09-28 15:10:17, 'Имя остановки4', 45.021999, 53.132000,  '');
INSERT INTO `point` VALUES (15, '1', 2018-09-28 15:35:37, 'Имя остановки6', 45.021000, 53.136002,  'kon2');



UPDATE пытаюсь делать так:

Код: sql
1.
UPDATE `point` SET  `krit`='do ost 6' WHERE `krit` BETWEEN 'kon1' AND 'kon2'


и наоборот
Код: sql
1.
UPDATE `point` SET  `krit`='do ost 1' WHERE `krit` BETWEEN 'kon2' AND 'kon1'



Соответственно ничего не выходит. Возможно надо находить время вхождения kon1, kon2 и наоборот, и в полученном интервале времени делать update

Не соображу никак
...
Рейтинг: 0 / 0
Update направления движения
    #39710868
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для каждого времени, где krit пусто, надо найти минимальное время с не-пустым krit, и в зависимости от его значения выполнить апдейт. В общем, какая-то хренб типа

Код: sql
1.
2.
3.
4.
5.
6.
7.
UPDATE point t1, point t2
SET t1.krit = CONCAT('do ost ', t2.point_name)
WHERE t1.krit = ''
  AND t2.td = (SELECT MIN(t3.td)
               FROM point t3
               WHERE t3.krit != ''
                 AND t3.dt > t1.dt);
...
Рейтинг: 0 / 0
Update направления движения
    #39710886
sql_new_58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, спасибо!

Появляется ошибка: You can't specify target table 't1' for update in FROM clause

Если я правильно понимаю, не разрешает выполнить Update и одновременно Select в одну и туже таблицу
...
Рейтинг: 0 / 0
Update направления движения
    #39710894
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это была идея реализации. То, что опущено во WHERE (подзапрос), следует переместить во FROM.
...
Рейтинг: 0 / 0
Update направления движения
    #39711036
sql_new_58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, посмотрите пожалуйста

Код: sql
1.
2.
3.
UPDATE point_proba t1, point_proba t2
SET t1.krit = CONCAT('do ost ', t2.point_name)
WHERE t1.krit = '' AND t2.td IN (SELECT * FROM (SELECT MIN(t3.td) FROM point_proba t3, point_proba t1 WHERE t3.krit != '' AND t3.td > t1.td) As mintime)



Происходит UPDATE от kon1 дo kon2 до 'остановки 6', также от kon2 дo kon1.

Что необходимо исправить в данном запросе, чтобы между kon2 дo kon1 стоял критерий 'до остановки1', в то время как от kon1 дo kon2 до 'остановки 6'?
...
Рейтинг: 0 / 0
Update направления движения
    #39711045
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да ну, надоело... сделай вот так:
Код: sql
1.
2.
3.
4.
5.
UPDATE point
SET krit = CASE WHEN krit = '' 
                THEN CONCAT('do ost ', @tmp) 
                ELSE (@tmp := krit) END
ORDER BY td DESC;
...
Рейтинг: 0 / 0
Update направления движения
    #39711075
sql_new_58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, спасибо за терпение и помощь
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Update направления движения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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