Forum Webscript.Ru
Общие => Базы данных => Тема начата: UltraMax от 30 Августа 2001, 13:15:49
-
У меня возникла следующая ситуация
Был готовый скрипт, в котором по определенному действию выаолнялось действие
$query = \\"DELETE FROM pending_tasks WHERE tid = \\\'$tid\\\'\\";
мне надо чтобы помимо удаления из pending_tasks вся эти данные были записаны в другую таблицу
есть ли какая-либо команда - позволяющаяэто сделать?
-
Минуточку... Делаешь два запроса: один на копирование данных (insert), другой на удаление (delete). Наверное так.
-
Минуточку... Делаешь два запроса: один на копирование данных (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 передать
Или я неправильно понимаю?
-
Вот тут-то и начинается это ограничение на вложенные запросы...:(
в ANSI SQL делается примерно так insert into tab1 (f1,f2,f3) values (select ff1,ff2,ff3 from tab2)
IMHO А с MySql придется наверное через массив делать. Сначала в массив, потом удаление, потом пробегая по массиву insert... так как ты сказал. Наверное так. Времени нет пробовать.:(
-
$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]
-
В мануале написано
\\"Вы также можете использовать SELECT для копирования элементов из одной таблицы в другую. MySQL поддерживает ограниченную форму запросов sub, для выполнения этой возможности.\\" Примера вот только нет. Может кто знает?
Кстати - а как именно селектом выбрать в массив чтобы его потом использовать?
-
В мануале написано
\\"Вы также можете использовать SELECT для копирования элементов из одной таблицы в другую. MySQL поддерживает ограниченную форму запросов sub, для выполнения этой возможности.\\" Примера вот только нет. Может кто знает?
Кстати - а как именно селектом выбрать в массив чтобы его потом использовать?
я же написал как сделать. что не работает?
-
Получатеся вот что
$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]
-
а зачем ты \\"$query = \\" в mysql суешь? =)
у меня работает правильно такой запрос
INSERT INTO content_bbs_banlist (ip) SELECT (content_bbs_sections.name) FROM content_bbs_sections WHERE content_bbs_sections.id = \\\'1\\\';
-
Такие дела получаются
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 только одно? Или почему*
-
1. попробуй пробелы после запятых
2. попробуй в SELECT указывать только имя поля
-
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>
-
ЕПРСТ
Разобрался
В 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\\\';
и все заработало
-
Ладно с этим разобрались
Вот еще какой вопрос
У меня есть два поля дат
Их тип - 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 секунд
Как бы это все подсчитать?