SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 10.07.2016 10:51:48

DevilishSkull
Участник
Зарегистрирован: 10.07.2016
Сообщений: 11

Замена ячеек связанных таблиц

Есть две таблицы, предположим "table1" и "table2"
В "table1" есть столбец "user" и "id", который может принимать значения от 1 до 3
В "table2" есть столбцы "user" и "group", в котором есть какое-то буквенное значение (одно из трех: "name1", "name2", "name3")
Как сделать, чтобы в зависимости от table2.group менялось table1.id и чтобы при этом это было на тех же строках, что и один и тот же "user"
Например, если table2.user = "admin" и table2.group = "name2", то на той же строке, что и table1.user = "admin", table1.id = 2 (и по тому же принципу из name3 получаем 3 и из name1 – 1)
P.S. Названия отличаются от того, что я написал
P.P.S. Названия для темы лучше не придумал smile

Отредактированно DevilishSkull (10.07.2016 11:17:51)

Неактивен

 

#2 10.07.2016 16:01:50

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Замена ячеек связанных таблиц


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 10.07.2016 16:13:58

DevilishSkull
Участник
Зарегистрирован: 10.07.2016
Сообщений: 11

Re: Замена ячеек связанных таблиц

Спасибо, теперь я знаю, как заменить. Теперь, если не трудно, подскажите, как туда ввести значение ячейки из другой таблицы, да еще и чтобы соответствовало user'у.
Заранее спасибо

Неактивен

 

#4 10.07.2016 16:15:34

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Замена ячеек связанных таблиц

update t2 set fieldname2 = (select fieldname1 from t1 where id = "ИСКОМЫЙ_АЙДИ")
как-то так.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 10.07.2016 16:22:00

DevilishSkull
Участник
Зарегистрирован: 10.07.2016
Сообщений: 11

Re: Замена ячеек связанных таблиц

Под искомым id подразумивается user? Если нет, то как он (user) тут задаётся?

Отредактированно DevilishSkull (10.07.2016 16:37:17)

Неактивен

 

#6 10.07.2016 16:23:51

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Замена ячеек связанных таблиц

Давайте на примере конкретных таблиц.
Есть таблица
t1 (id1, val1)
1 11
2 22
3 33

Есть таблица
t2 (id2, val2)
1 111
2 222
3 333

Что Вы хотите сделать, то есть какое содержимое таблиц должно стать в итоге в результате Update'a?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#7 10.07.2016 16:32:49

DevilishSkull
Участник
Зарегистрирован: 10.07.2016
Сообщений: 11

Re: Замена ячеек связанных таблиц

Немного не понял, что вы написали, но суть понял. Сейчас попробую изобразить.
Вот первая таблица (с id и user):
t1 (id1 user1)
0 admin
0 admin4ik
0 root
Вот вторая (с gr1 и user1):
t2 (gr1 user1)
bla admin
blabla admin4ik
blbla root
(Список user'ов одинаковый)
Надо присвоить каждой группе (gr) свой id (bla - 1; blabla - 2; blbla - 3) и, в зависимости от получившегося id, заменить id в первой таблице на нужные ( в данном случае admin - 1; admin4ik - 2; root - 3; )
Как-то так

Отредактированно DevilishSkull (10.07.2016 16:34:37)

Неактивен

 

#8 10.07.2016 16:49:03

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Замена ячеек связанных таблиц

>Надо присвоить каждой группе (gr) свой id (bla - 1; blabla - 2; blbla - 3)
Вы имеете в виду что нужно заменить bla на 1, blabla на 2 и blbla на 3? У них типы данных вообще-то разные.
Или у таблицы t2 уже имеется поле id (просто Вы его не указали)?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#9 10.07.2016 16:52:10

DevilishSkull
Участник
Зарегистрирован: 10.07.2016
Сообщений: 11

Re: Замена ячеек связанных таблиц

В принципе, можно добавить в t2 столбец id
Цель - получить id  в t1, в зависимости от того, что введено в t2.gr

Неактивен

 

#10 11.07.2016 08:38:25

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Замена ячеек связанных таблиц

при условии, что групп всего 3:

update t1 set id1 = (select if(gr1 = 'bla', 1 , if(gr1 = 'blabla', 2, 3)) from t2 where t2.user1 = t1.user1);

Неактивен

 

#11 11.07.2016 09:37:58

DevilishSkull
Участник
Зарегистрирован: 10.07.2016
Сообщений: 11

Re: Замена ячеек связанных таблиц

vasya написал:

при условии, что групп всего 3:

update t1 set id1 = (select if(gr1 = 'bla', 1 , if(gr1 = 'blabla', 2, 3)) from t2 where t2.user1 = t1.user1);

Спасибо, попробую.
Я так понял, что если я захочу увеличить количество групп (но вряд ли мне это понадобится), то надо будет просто увеличить кол-во ифов.
Кстати, могу ли я вместо просто "3" написать if(gr1 = 'blbla', 3) ?
Потому что у меня есть и другие группы, которые трогать не нужно
И последний, наверно, очень нубский вопрос.
Как сделать, чтобы этот запрос каждое какое-то время выполнялся (например каждую минуту)?

Отредактированно DevilishSkull (11.07.2016 09:44:02)

Неактивен

 

#12 11.07.2016 11:22:46

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Замена ячеек связанных таблиц

DevilishSkull написал:

Я так понял, что если я захочу увеличить количество групп (но вряд ли мне это понадобится), то надо будет просто увеличить кол-во ифов.

да


DevilishSkull написал:

Кстати, могу ли я вместо просто "3" написать if(gr1 = 'blbla', 3) ?

нет, if имеет три аргумента

DevilishSkull написал:

Потому что у меня есть и другие группы, которые трогать не нужно

для остальных оставляйте без изменений:
if(gr1 = 'bla', 1 , if(gr1 = 'blabla', 2, if(gr1 = 'blbla', 3, t1.id1)))

DevilishSkull написал:

И последний, наверно, очень нубский вопрос.
Как сделать, чтобы этот запрос каждое какое-то время выполнялся (например каждую минуту)?

http://dev.mysql.com/doc/refman/5.7/en/ … event.html

Неактивен

 

#13 11.07.2016 11:55:06

DevilishSkull
Участник
Зарегистрирован: 10.07.2016
Сообщений: 11

Re: Замена ячеек связанных таблиц

vasya написал:

DevilishSkull написал:

Я так понял, что если я захочу увеличить количество групп (но вряд ли мне это понадобится), то надо будет просто увеличить кол-во ифов.

да


DevilishSkull написал:

Кстати, могу ли я вместо просто "3" написать if(gr1 = 'blbla', 3) ?

нет, if имеет три аргумента

DevilishSkull написал:

Потому что у меня есть и другие группы, которые трогать не нужно

для остальных оставляйте без изменений:
if(gr1 = 'bla', 1 , if(gr1 = 'blabla', 2, if(gr1 = 'blbla', 3, t1.id1)))

DevilishSkull написал:

И последний, наверно, очень нубский вопрос.
Как сделать, чтобы этот запрос каждое какое-то время выполнялся (например каждую минуту)?

http://dev.mysql.com/doc/refman/5.7/en/ … event.html

Большое спасибо. Однако я еще одну деталь не учёл (точнее она только сейчас появилась).
В таблице t2 указан не user1, а user2 (типа это зашифрованный user1)
И есть еще таблица-расшифровка t3, в которой есть поля: name,value и type.
Поле name = user2 (И так)
Поле value = user1 (И так)
Но в этой таблице есть и другие данные, так что надо искать ту строчку, в которой type = 'name'
Помогите, пожалуйста, осуществить эту "расшифровку".
Прошу прощения, что не сказал сразу об этом (так как сам не заметил)

Отредактированно DevilishSkull (11.07.2016 11:57:18)

Неактивен

 

#14 11.07.2016 12:28:03

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Замена ячеек связанных таблиц

не очень понятно
приведите пример с данными на несколько строк для каждой таблицы (как в http://sqlinfo.ru/forum/viewtopic.php?pid=43452#p43452 ) и какой должен быть результат

Неактивен

 

#15 11.07.2016 12:43:03

DevilishSkull
Участник
Зарегистрирован: 10.07.2016
Сообщений: 11

Re: Замена ячеек связанных таблиц

Хорошо.
t1 (id1 user1)
0 admin
0 admin4ik
0 root

t2 (gr1 user2)
bla hh664hyhyu8743h4678ggfg
blabla 76ggr53v7efe98f4jr367gfd4
blbla yttggft5545hff56grtgfr33

(Шифры написаны от балды)

t3 (user1 user2 type)
admin hh664hyhyu8743h4678ggfg name
admin4ik 76ggr53v7efe98f4jr367gfd4 name
root yttggft5545hff56grtgfr33 name
other function notname

Цель: превратить t1.id1 в нужный id

Например, в данном случае, рассмотрим пользователя user1 = 'root':
У него шифр user2 = 'yttggft5545hff56grtgfr33'
Этому шифру соответствует gr1 ="blbla"
А у blbla номер id1 = 3 (это вы уже написали, как сделать)
И из всего этого получаем для root t1.id1 = 3

P.S. Напишите желательно весь код, чтобы я не запутался

Неактивен

 

#16 11.07.2016 12:49:01

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Замена ячеек связанных таблиц

update t1 set id1 = (select if(gr1 = 'bla', 1 , if(gr1 = 'blabla', 2, 3)) from t2 join t3 on t2.user2=t3.user2  where t3.user1 = t1.user1);

Неактивен

 

#17 11.07.2016 12:55:13

DevilishSkull
Участник
Зарегистрирован: 10.07.2016
Сообщений: 11

Re: Замена ячеек связанных таблиц

А где тут отбрасывается все в t3, у чего type не равен "name"?
Мне это нужно, потому что там могут возникнуть повторения значений

Неактивен

 

#18 11.07.2016 13:00:47

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Замена ячеек связанных таблиц

update t1 set id1 = (select if(gr1 = 'bla', 1 , if(gr1 = 'blabla', 2, 3)) from t2 join t3 on t2.user2=t3.user2  where t3.user1 = t1.user1 and t3.`type` = 'name');

Неактивен

 

#19 11.07.2016 13:03:37

DevilishSkull
Участник
Зарегистрирован: 10.07.2016
Сообщений: 11

Re: Замена ячеек связанных таблиц

А что это за странные кавычки выделяют type?

Неактивен

 

#20 11.07.2016 13:28:05

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Замена ячеек связанных таблиц

Этими странными кавычками стоит обрамлять имена таблиц и полей в запросах. В данном случае это было сделано специально, потому что слово type - ключевое.
Сам запрос корректно отработал?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#21 11.07.2016 13:42:56

DevilishSkull
Участник
Зарегистрирован: 10.07.2016
Сообщений: 11

Re: Замена ячеек связанных таблиц

Спасибо за информацию, буду знать. А как называются эти кавычки?
Запрос еще не проверил. Проверю - отпишусь
Огромное спасибо за помощь!

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson