Автор Тема: Вставка данных в MySQL из одной записи в другую  (Прочитано 5537 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн UltraMax

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.dinamo-minsk.org
У меня возникла следующая ситуация
Был готовый скрипт, в котором по определенному действию выаолнялось действие
$query = \\"DELETE FROM pending_tasks WHERE tid = \\\'$tid\\\'\\";
мне надо чтобы помимо удаления из pending_tasks вся эти данные были записаны в другую таблицу
есть ли какая-либо команда - позволяющаяэто сделать?

Оффлайн lodevar

  • Сеньор-Помидор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 757
  • +0/-0
  • 2
    • Просмотр профиля
    • http://lodevar.hut.ru
Вставка данных в MySQL из одной записи в другую
« Ответ #1 : 30 Августа 2001, 13:31:22 »
Минуточку... Делаешь два запроса: один на копирование данных (insert), другой на удаление (delete). Наверное так.
С наилучшими пожеланиями. LODEVAR

Оффлайн UltraMax

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.dinamo-minsk.org
Вставка данных в MySQL из одной записи в другую
« Ответ #2 : 30 Августа 2001, 13:43:45 »
Цитировать
Минуточку... Делаешь два запроса: один на копирование данных (insert), другой на удаление (delete). Наверное так.

Я плохо разбираюсь в php
Если можно поточнее
В оригинали было так
                        {
                                $query = \\"DELETE FROM pending_tasks WHERE tid = \\\'$tid\\\'\\";
                        }
                        db_query($query);
мне же нужно эти данные (которые удалаяются по tid-у) скопировать в другую таблицу. Но ведь если я делаю INSERT то мне надо знать что я вставляю (как я понимаю). ЧТо ж мне просто написать
$query = \\"INSERT INTO completed_tasks WHERE tid = \\\'$tid\\\'\\";
а что оно вставит-то? мне ж надо какие-то VALUES передать
Или я неправильно понимаю?

Оффлайн lodevar

  • Сеньор-Помидор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 757
  • +0/-0
  • 2
    • Просмотр профиля
    • http://lodevar.hut.ru
Вставка данных в MySQL из одной записи в другую
« Ответ #3 : 30 Августа 2001, 14:10:30 »
Вот тут-то и начинается это ограничение на вложенные запросы...:(

в ANSI SQL делается примерно так insert into tab1 (f1,f2,f3) values (select ff1,ff2,ff3 from tab2)

IMHO А с MySql придется наверное через массив делать. Сначала в массив, потом удаление, потом пробегая по массиву insert... так как ты сказал. Наверное так. Времени нет пробовать.:(
С наилучшими пожеланиями. LODEVAR

Оффлайн AliMamed

  • \\o/ ali akbar \\o/
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2409
  • +2/-0
  • 2
    • Просмотр профиля
    • http://alimamed.pp.ru
Вставка данных в MySQL из одной записи в другую
« Ответ #4 : 30 Августа 2001, 14:21:07 »
$query = \\"
INSERT INTO table_new (f1, f2, f3) SELECT (pending_tasks.f1, pending_tasks.f2, pending_tasks.f3) FROM pending_tasks WHERE
pending_tasks.tid = \\\'$tid\\\';
DELETE FROM pending_tasks WHERE tid=\\\'$tid\\\';
\\";



[Изменено 30.8.2001 автор: AliMamed]
ну, будем исповедоваться?

Оффлайн UltraMax

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.dinamo-minsk.org
Вставка данных в MySQL из одной записи в другую
« Ответ #5 : 30 Августа 2001, 14:29:54 »
В мануале написано
\\"Вы также можете использовать SELECT для копирования элементов из одной таблицы в другую. MySQL поддерживает ограниченную форму запросов sub, для выполнения этой возможности.\\" Примера вот только нет. Может кто знает?
Кстати - а как именно селектом выбрать в массив чтобы его потом использовать?

Оффлайн AliMamed

  • \\o/ ali akbar \\o/
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2409
  • +2/-0
  • 2
    • Просмотр профиля
    • http://alimamed.pp.ru
Вставка данных в MySQL из одной записи в другую
« Ответ #6 : 30 Августа 2001, 14:32:46 »
Цитировать
В мануале написано
\\"Вы также можете использовать SELECT для копирования элементов из одной таблицы в другую. MySQL поддерживает ограниченную форму запросов sub, для выполнения этой возможности.\\" Примера вот только нет. Может кто знает?
Кстати - а как именно селектом выбрать в массив чтобы его потом использовать?  

я же написал как сделать. что не работает?
ну, будем исповедоваться?

Оффлайн UltraMax

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.dinamo-minsk.org
Вставка данных в MySQL из одной записи в другую
« Ответ #7 : 30 Августа 2001, 16:07:42 »
Получатеся вот что
$query = \\"INSERT INTO completed_tasks (title,info) SELECT (pending_tasks.title, pending_tasks.info) FROM pending_tasks WHERE pending_tasks.tid = \\\'$tid\\\'\\";
не срабатывает - то есть не добавляет запись
а вот
$query = \\"DELETE FROM pending_tasks WHERE tid = \\\'$tid\\\'\\";
работает - то есть удалаяет.....
возможно в первой строчке (insert) не совсем правильно
так как если я делю в клиенте MySQL-ном такую запись
mysql>INSERT INTO completed_tasks (title,info) SELECT (pending_tasks.title, pending_tasks.info) FROM pending_tasks WHERE pending_tasks.tid = \\\'5\\\';
То получаю
ERROR 1064: You have an error in your SQL syntax near \\\'$query = INSERT INTO completed_tasks (title,info) SELECT (pending_tasks.title, p\\\' at line 1

[Изменено 30.8.2001 автор: UltraMax]

Оффлайн AliMamed

  • \\o/ ali akbar \\o/
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2409
  • +2/-0
  • 2
    • Просмотр профиля
    • http://alimamed.pp.ru
Вставка данных в MySQL из одной записи в другую
« Ответ #8 : 30 Августа 2001, 16:29:12 »
а зачем ты \\"$query = \\" в mysql суешь? =)
у меня работает правильно такой запрос
INSERT INTO content_bbs_banlist (ip) SELECT (content_bbs_sections.name) FROM content_bbs_sections WHERE content_bbs_sections.id = \\\'1\\\';
ну, будем исповедоваться?

Оффлайн UltraMax

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.dinamo-minsk.org
Вставка данных в MySQL из одной записи в другую
« Ответ #9 : 30 Августа 2001, 18:06:02 »
Такие дела получаются
INSERT INTO completed_tasks (tid) SELECT (pending_tasks.tid) FROM pending_tasks WHERE pending_tasks.tid = \\\'5\\\';
работает
а вот
INSERT INTO completed_tasks (tid,uid) SELECT (pending_tasks.tid,pending_tasks.uid) FROM pending_tasks WHERE pending_tasks.tid = \\\'5\\\';
ругается
ERROR 1064: You have an error in your SQL syntax near \\\'pending_tasks.uid) FROM pending_tasks WHERE pending_tasks.tid = \\\'5\\\'\\\' at line 1
...
Почему так? Из-за того что пытаюсь записать два поля а в WHERE только одно? Или почему*

Оффлайн AliMamed

  • \\o/ ali akbar \\o/
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2409
  • +2/-0
  • 2
    • Просмотр профиля
    • http://alimamed.pp.ru
Вставка данных в MySQL из одной записи в другую
« Ответ #10 : 31 Августа 2001, 10:38:35 »
1. попробуй пробелы после запятых
2. попробуй в SELECT указывать только имя поля
ну, будем исповедоваться?

Оффлайн UltraMax

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.dinamo-minsk.org
Вставка данных в MySQL из одной записи в другую
« Ответ #11 : 31 Августа 2001, 11:33:56 »
Цитировать
1. попробуй пробелы после запятых
2. попробуй в SELECT указывать только имя поля


Кхм - ни хрена не получается....
Может это можно как-то обойти? Типа сначала сделать SELECT того чего надо в массив
А потом уже INSERT его в бащу?

mysql> INSERT INTO completed_tasks (tid, uid) SELECT (pending_tasks.tid, pending_tasks.uid) FROM pending_tasks WHERE pending_tasks.tid = \\\'5\\\';
ERROR 1064: You have an error in your SQL syntax near \\\' pending_tasks.uid) FROM pending_tasks WHERE pending_tasks.tid = \\\'5\\\'\\\' at line 1
mysql> INSERT INTO completed_tasks (tid, uid) SELECT (tid, uid) FROM pending_tasks WHERE pending_tasks.tid = \\\'5\\\';
ERROR 1064: You have an error in your SQL syntax near \\\' uid) FROM pending_tasks WHERE pending_tasks.tid = \\\'5\\\'\\\' at line 1
mysql> INSERT INTO completed_tasks (tid, uid) SELECT (tid, uid) FROM pending_tasks WHERE tid = \\\'5\\\';
ERROR 1064: You have an error in your SQL syntax near \\\' uid) FROM pending_tasks WHERE tid = \\\'5\\\'\\\' at line 1
mysql>

Оффлайн UltraMax

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.dinamo-minsk.org
Вставка данных в MySQL из одной записи в другую
« Ответ #12 : 31 Августа 2001, 12:23:21 »
ЕПРСТ
Разобрался
В MySQL оказывается НЕ НАДО скобки в SELECT ставить
и если для запроса одного поля еще с кавычками идет то если больше (2,3 и т.п) - не работает
так что правильный код
INSERT INTO completed_tasks (tid,uid) SELECT pending_tasks.tid,pending_tasks.uid FROM pending_tasks WHERE pending_tasks.tid = \\\'5\\\';
и все заработало

Оффлайн UltraMax

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 98
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.dinamo-minsk.org
Вставка данных в MySQL из одной записи в другую
« Ответ #13 : 31 Августа 2001, 13:39:42 »
Ладно с этим разобрались
Вот еще какой вопрос
У меня есть два поля дат
Их тип - datetime, формат 0000-00-00 00:00:00
Мне нужно получить разницу между ними, в таком же формате
Но если я делаю
SELECT date_assigned-due_date from pending_tasks WHERE tid = \\\'5\\\';
то получаю значение 358
Я думал сначала что это секунды, но реально между ними разницы - 2001-08-29 15:54:58 и 2001-08-29 15:51:00
то есть 218 секунд
Как бы это все подсчитать?

 

Sitemap 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 28