вставка данных в несколько таблиц

Eratt

Создатель
Регистрация
27 Фев 2009
Сообщения
43
Реакции
0
Здравствуйте,

как в одном SQL запросе сделать вставку (INSERT) записей сразу в несколько таблиц ???

конкретно в моём случае : у меня есть две таблицы - tasks с полями (id, title, description) и link_table с полями (id, project_id, task_id, user_id), они связаны между собой полем (id), мне необходимо вставлять в tasks записи по всем полям, а в link_table только по task_id - причём с условием, что записи в остальных полях в таблице link_table меняться не должны, но должны копироваться при каждом последующем запросе (новом SQL запросе в котором два INSERT'a), где поле project_id в каждом новом двух INSERT - овом запросе равняется новому конкретному значению - собвстенно чтобы стало яснее привожу мой неправильный запрос
Код:
$result_add = mysql_query("INSERT INTO `nemanoedb`.`tasks` (`title`, `description`) VALUES ('$title','$description');
                          INSERT INTO `nemanoedb`.`link_table` (`task_id`) VALUES ('$task_id') WHERE `project_id` = '$project_id'") or die(mysql_error());

выдаётся такая : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO `nemanoedb`.`link_table` (`task_id`) VALUES ('') WHERE `project_id` ' at line 2
Как быть ? У меня MySQL версии - 5.5.24
 
Сделай двумя запросами – в чём проблема-то..?
В INSERT не должно быть никаких условий WHERE.
 
В INSERT не должно быть никаких условий WHERE.
тогда я так полагаю надо будет вместо второго INSERT делать UPDATE ? и плюс ещё два запроса на вставку в tasks и в link_table - многовато получается запросов
 
Не совсем понятна из описания задачи сама необходимость разделения данных на две таблицы.
task может быть связан с несколькими project или user?
 
tasks связан только с одним конкретным projects и с несколькими users - я делю данные на две таблицы чтобы была связь между этими таблицами - а именно по первичному ключу id - это мне нужно чтобы потом для конкретного project выводить свои tasks и соотвественно свои (или назначенные) users
 
Тогда и связывать их нужно по users:
`tasks`:
id | title | description | project_id
`link_table` `tasks_users`:
task_id | user_id

В любом случае – всё решается двумя запросами:


Код:
mysql_query("INSERT INTO `nemanoedb`.`tasks` (`title`, `description`, `project_id`)
VALUES ('" . mysql_real_escape_string($title) . "','" . mysql_real_escape_string($description) . "', '" . intval($project_id) . "')");
$new_task_id = mysql_insert_id();

mysql_query("INSERT INTO `nemanoedb`.`tasks_users` (`task_id`, `user_id`)
VALUES ('" . intval($new_task_id) . "', '" . intval($user_id) . "')");
 
я извиняюсь, некорректно сказал, я имел ввиду tasks связан c одним конкретным projects и несколькими users из этого projects - тоесть грубо основная задача у меня такая : сначала создаются юзера потом, создаются админы создают проекты, потом они назначают юзерам проекты, а юзеры в свою очередь создают tasks в проектах в которых назначались админами.

mysql_insert_id +1

юзеров трогать не нужно потому что они общие как для tasks так и для projects - мне нужно именно вот сделать привязку одного project с несколькими созданными (юзерами) tasks
 
Для получения списка всех тасков проекта, например с ID = 23:
SELECT * FROM `tasks` WHERE `project_id` = '23'
.
 
Используй PDO, через него можно
 
а причём здесб API для работы с mySQL если ошибка выводится со стороны субд? - тоесть у меня же ошибка именно в SQL запросе
 
Назад
Сверху