Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
Haktar

Перенос данных с одного столбца в другой

Recommended Posts

Нужно перенести данные с одного столбца в другой, столбцы в разных таблицах. Выполняю запрос:

REPLACE INTO принимающая таблица(`принимающий столбец`) SELECT столбец отправитель FROM таблица отправитель

 

Майадмин пишет что действие удачно выполнено. Но результата никакого - данные не заменились.

Share this post


Link to post
Share on other sites

Недостаточно информации.

 

1. Столбцы уже есть?

2. Другие столбцы в таблице есть?

3. На чем строится связь между строками таблицы? И есть ли она вообще?

 

В зависимости от ответов запрос может совершенно изменяться от:

 

UPDATE table1 t1 SET t1.column1 = (SELECT t2.column2 FROM table2 t2 WHERE t2.id = t1.id)

 

до:

 

INSERT INTO table1 SELECT * FROM table2

 

Ваш запрос не выполняется, т.к. REPLACE работает по ключу, а ключа у вас, скорее всего, нет.

Share this post


Link to post
Share on other sites
1. Столбцы уже есть?

Да.

 

2. Другие столбцы в таблице есть?

Тоже есть.

 

3. На чем строится связь между строками таблицы? И есть ли она вообще?

Дело в том что у меня стоял мод [EN30] Ajax Thanks v1.0.2, затем обновил до версии 1.0.5. Всё прошло успешно, за исключением того что число выставленного количества благодарностей у юзеров обнулилось. Как оказалось в старой версии мода числовое кол-во спасибо находилось в таблице members (столбец thanked), тогда как в новой версии мода это значение перенесено в таблицу profile_portal (столбец также thanked).

Вот я и решил заменить их.

Share this post


Link to post
Share on other sites

Ага, т.е. переносите столбец thanked из members в profile_portal.

 

Тогда запрос такой:

 

UPDATE profile_portal pp SET pp.thanked = (SELECT m.thanked FROM members m WHERE m.member_id = pp.pp_member_id)

  • Upvote 2

Share this post


Link to post
Share on other sites

@Ritsuka,

Вчера вы меня спасли и сегодня. Спасибо большое.

Share this post


Link to post
Share on other sites

Ещё один вопрос по запросам к базе.

Хочу удалить приватные сообщения которые старше скажем 3 месяцев.

По определённым юзерам запросы составил, и они выполнились:

DELETE FROM ibf_message_posts WHERE msg_author_id=1
DELETE FROM ibf_message_topic_user_map WHERE map_user_id=1
DELETE FROM ibf_message_topics WHERE mt_to_member_id=1
DELETE FROM ibf_message_text WHERE msg_author_id=1

 

А вот по времени - незнаю как составить.

Share this post


Link to post
Share on other sites

DELETE p.*, um.*, t.* FROM ibf_message_posts p, ibf_message_topic_user_map um, ibf_message_topics t
WHERE t.mt_date < UNIX_TIMESTAMP('2012-02-01') AND p.msg_topic_id=t.mt_id AND um.map_topic_id=t.mt_id

 

Удалит все ТЕМЫ лс (со всеми сообщениями из них) созданные раньше чем 2012-02-01

 

PS

ibf_message_text в 3х больше нету

  • Upvote 1

Share this post


Link to post
Share on other sites

DELETE p.*, um.*, t.* FROM ibf_message_posts p, ibf_message_topic_user_map um, ibf_message_topics t
WHERE t.mt_date < UNIX_TIMESTAMP('2012-02-01') AND p.msg_topic_id=t.mt_id AND um.map_topic_id=t.mt_id

 

Удалит все ТЕМЫ лс (со всеми сообщениями из них) созданные раньше чем 2012-02-01

Большущее Спасибо!

 

PS

ibf_message_text в 3х больше нету

Ага. Эта таблица ещё осталась от версии форума 1.3 На днях её снёс.

Share this post


Link to post
Share on other sites

Всё отлично, вот только с таблицы ibf_message_topic_user_map практически ничего не удалено. Как составить запрос только по этой таблице?

Share this post


Link to post
Share on other sites

Значит там ничего больше удалять не нужно. Лучше не трогать.

Share this post


Link to post
Share on other sites

Значит там ничего больше удалять не нужно. Лучше не трогать.

Просто остались пустые маркеры, вот как на скрине:

post-31497-0-88527900-1339845655_thumb.gif

Share this post


Link to post
Share on other sites

Удалит все ТЕМЫ лс (со всеми сообщениями из них) созданные раньше чем 2012-02-01

А можно такой же запрос составить, только что бы в нём было время скажем с 10.02.2015 по 04.01.2016?

Share this post


Link to post
Share on other sites

А можно такой же запрос составить, только что бы в нём было время скажем с 10.02.2015 по 04.01.2016?

Тут обычное сравнение чисел

Можете так

DELETE p.*, um.*, t.* FROM ibf_message_posts p, ibf_message_topic_user_map um, ibf_message_topics t
WHERE t.mt_date > UNIX_TIMESTAMP('2015-02-10') AND t.mt_date < UNIX_TIMESTAMP('2016-01-04') AND p.msg_topic_id=t.mt_id AND um.map_topic_id=t.mt_id

  • Upvote 2

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...