Задавайте вопросы, мы ответим
Вы не зашли.
Есть две таблицы, предположим "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. Названия для темы лучше не придумал
Отредактированно DevilishSkull (10.07.2016 11:17:51)
Неактивен
Неактивен
Спасибо, теперь я знаю, как заменить. Теперь, если не трудно, подскажите, как туда ввести значение ячейки из другой таблицы, да еще и чтобы соответствовало user'у.
Заранее спасибо
Неактивен
update t2 set fieldname2 = (select fieldname1 from t1 where id = "ИСКОМЫЙ_АЙДИ")
как-то так.
Неактивен
Под искомым id подразумивается user? Если нет, то как он (user) тут задаётся?
Отредактированно DevilishSkull (10.07.2016 16:37:17)
Неактивен
Давайте на примере конкретных таблиц.
Есть таблица
t1 (id1, val1)
1 11
2 22
3 33
Есть таблица
t2 (id2, val2)
1 111
2 222
3 333
Что Вы хотите сделать, то есть какое содержимое таблиц должно стать в итоге в результате Update'a?
Неактивен
Немного не понял, что вы написали, но суть понял. Сейчас попробую изобразить.
Вот первая таблица (с 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)
Неактивен
>Надо присвоить каждой группе (gr) свой id (bla - 1; blabla - 2; blbla - 3)
Вы имеете в виду что нужно заменить bla на 1, blabla на 2 и blbla на 3? У них типы данных вообще-то разные.
Или у таблицы t2 уже имеется поле id (просто Вы его не указали)?
Неактивен
В принципе, можно добавить в t2 столбец id
Цель - получить id в t1, в зависимости от того, что введено в t2.gr
Неактивен
при условии, что групп всего 3:
Неактивен
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)
Неактивен
DevilishSkull написал:
Я так понял, что если я захочу увеличить количество групп (но вряд ли мне это понадобится), то надо будет просто увеличить кол-во ифов.
да
DevilishSkull написал:
Кстати, могу ли я вместо просто "3" написать if(gr1 = 'blbla', 3) ?
нет, if имеет три аргумента
DevilishSkull написал:
Потому что у меня есть и другие группы, которые трогать не нужно
для остальных оставляйте без изменений:
if(gr1 = 'bla', 1 , if(gr1 = 'blabla', 2, if(gr1 = 'blbla', 3, t1.id1)))
DevilishSkull написал:
И последний, наверно, очень нубский вопрос.
Как сделать, чтобы этот запрос каждое какое-то время выполнялся (например каждую минуту)?
Неактивен
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 написал:
И последний, наверно, очень нубский вопрос.
Как сделать, чтобы этот запрос каждое какое-то время выполнялся (например каждую минуту)?
Большое спасибо. Однако я еще одну деталь не учёл (точнее она только сейчас появилась).
В таблице t2 указан не user1, а user2 (типа это зашифрованный user1)
И есть еще таблица-расшифровка t3, в которой есть поля: name,value и type.
Поле name = user2 (И так)
Поле value = user1 (И так)
Но в этой таблице есть и другие данные, так что надо искать ту строчку, в которой type = 'name'
Помогите, пожалуйста, осуществить эту "расшифровку".
Прошу прощения, что не сказал сразу об этом (так как сам не заметил)
Отредактированно DevilishSkull (11.07.2016 11:57:18)
Неактивен
не очень понятно
приведите пример с данными на несколько строк для каждой таблицы (как в http://sqlinfo.ru/forum/viewtopic.php?pid=43452#p43452 ) и какой должен быть результат
Неактивен
Хорошо.
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. Напишите желательно весь код, чтобы я не запутался
Неактивен
Неактивен
А где тут отбрасывается все в t3, у чего type не равен "name"?
Мне это нужно, потому что там могут возникнуть повторения значений
Неактивен
Неактивен
А что это за странные кавычки выделяют type?
Неактивен
Этими странными кавычками стоит обрамлять имена таблиц и полей в запросах. В данном случае это было сделано специально, потому что слово type - ключевое.
Сам запрос корректно отработал?
Неактивен
Спасибо за информацию, буду знать. А как называются эти кавычки?
Запрос еще не проверил. Проверю - отпишусь
Огромное спасибо за помощь!
Неактивен