powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Mysql вставка значение поля из этого же поля
10 сообщений из 10, страница 1 из 1
Mysql вставка значение поля из этого же поля
    #39214011
vitekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток, подскажите кому не трудно, есть таблица в mysql вида:

*телефон дата id * 236 2016-04-12 09:57:37 333 * 236 2016-04-12 09:57:35 * 209 2016-04-12 09:57:36 343 * 236 2016-04-12 09:59:35 * 236 2016-04-12 09:59:37 355 * 236 2016-04-12 09:59:38

id соответствует номеру телефона, но может быть разный, нужно заполнить пустые поля значением id для конкретного телефона чтобы получилось:

*телефон дата id * 236 2016-04-12 09:57:37 333 * 236 2016-04-12 09:57:35 333 * 209 2016-04-12 09:57:36 343 * 236 2016-04-12 09:59:35 333 * 236 2016-04-12 09:59:37 355 * 236 2016-04-12 09:59:38 355

заранее благодарю.
...
Рейтинг: 0 / 0
Mysql вставка значение поля из этого же поля
    #39214050
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitekb,


чтонибудь типа :

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
update 
    table1 t1
JOIN
    (select t2.tel, max(t2.id) as max_id
      from table1 t2) t3
ON
    t1.tel = t3.tel
set t1.id = t3.max_id
...
Рейтинг: 0 / 0
Mysql вставка значение поля из этого же поля
    #39214051
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
....ааа, так у вас динамически может изменится ИД
у *236 с ид=333 на ид=355 ? так?


тогда на переменных или курсором в хранимой процедуре.
...
Рейтинг: 0 / 0
Mysql вставка значение поля из этого же поля
    #39214053
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
....можно еше левый селф-джоинт сделать по условию
одинакового телефона и по времени спрва ДО времени слева.
потом выбрать последнее непустое значение...

...а может и не левый...
а может и продется два селф-джоинта делать ...
посмотрите ФАК -- выборка первой-последней записис в группе.

Там описан случай двух таблиц перент-чайлд.
В вашем случае одна и таже таблица таботает и как перент и как чайлд.
поэтому два селф-дхоинта...
...
Рейтинг: 0 / 0
Mysql вставка значение поля из этого же поля
    #39214071
vitekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javajdbc,
да, id может измениться в любое время и недавно занимаюсь SQL не могу придумать как сделать
...
Рейтинг: 0 / 0
Mysql вставка значение поля из этого же поля
    #39214072
vitekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javajdbc, спасибо, посмотрю
...
Рейтинг: 0 / 0
Mysql вставка значение поля из этого же поля
    #39214176
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitekb,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select 
  ddate, 
  @dd:=(case when @tt=tel then coalesce(id, @dd) else id end) AS idd, 
  @tt:=tel AS ttel
from table1
join
(select @dd:=-1, @tt:=-1) z
order by tel, ddate




Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
update table1 t1
join
(
   select 
     ddate, 
     @dd:=(case when @tt=tel then coalesce(id, @dd) else id end) AS idd, 
     @tt:=tel AS ttel
   from table1
   join
   (select @dd:=-1, @tt:=-1) z
   order by tel, ddate
) t2

on   t1.ddate = t2.ddate
and t1.tel = t2.ttel

set t1.id = t2.idd
...
Рейтинг: 0 / 0
Mysql вставка значение поля из этого же поля
    #39215243
vitekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javajdbc, спасибо за помощь, поле id заполняется, но не полностью, например у телефона 236 во всех id должно быть 333, но встречается с пустым значение, постараюсь разобраться почему это происходит
...
Рейтинг: 0 / 0
Mysql вставка значение поля из этого же поля
    #39223443
vitekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javajdbc, спасибо за направление, реализовал с помощью курсора

добавил автоинкремент для update из курсора

ALTER TABLE queue_back ADD `id1` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;

создал процедуру

CREATE DEFINER=`testdb`@`%` PROCEDURE `opername`()
BEGIN

DECLARE done INT DEFAULT 0;
DECLARE oid INT DEFAULT 0;
DECLARE odate DATETIME;
DECLARE oname CHAR(20);
DECLARE ophone CHAR(64);

DECLARE Cursor1 CURSOR FOR
SELECT `id1`, `date`, `phone`, `id` FROM `test_test`
ORDER BY `agent`;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;

OPEN Cursor1;
FETCH Cursor1 INTO oid, odate, ophone, oname;

WHILE done = 0 DO
IF oname != 0
THEN
SET @onamet := oname;
SET @ophonet := ophone;
END IF;

IF oname = 0 AND @ophonet = ophone
THEN
update `test_test` set `id` = (@onamet) where `id1` = oid;
END IF;

FETCH Cursor1 INTO oid, odate, ophone, oname;

END WHILE;

CLOSE Cursor1;

END
...
Рейтинг: 0 / 0
Mysql вставка значение поля из этого же поля
    #39223895
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а разве нельзя сделать "классическим" способом??
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
update
  (
  select n.tel, n.dt, max(e.dt)dt0
  from mytable n
  join mytable e on e.tel=n.tel and e.dt<=n.dt and e.id<>0
  where n.id=0 or n.id is null
  group by n.tel, n.dt -- с индексом (tel,dt)
  ) q
join mytable t on t.tel=q.tel and t.dt=q.dt and (t.id is null or t.id=0)
join mytable d on d.tel=q.tel and d.dt=q.dt0
set t.id=d.id
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Mysql вставка значение поля из этого же поля
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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