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

Arramis

Новичок
Здравствуйте,

как в одном 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 - овом запросе равняется новому конкретному значению - собвстенно чтобы стало яснее привожу мой неправильный запрос

PHP:
$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

как быть ?

p.s. у меня MySQL версии - 5.5.24
 

Andkorol

Новичок
Сделай двумя запросами – в чём проблема-то..?
В INSERT не должно быть никаких условий WHERE.
 

Arramis

Новичок
В INSERT не должно быть никаких условий WHERE.[/quote]
тогда я так полагаю надо будет вместо второго INSERT делать UPDATE ? и плюс ещё два запроса на вставку в tasks и в link_table - многовато получается запросов
 

Andkorol

Новичок
Не совсем понятна из описания задачи сама необходимость разделения данных на две таблицы.
task может быть связан с несколькими project или user?
 

Arramis

Новичок
Не совсем понятна из описания задачи сама необходимость разделения данных на две таблицы.
task может быть связан с несколькими project или user?
tasks связан только с одним конкретным projects и с несколькими users - я делю данные на две таблицы чтобы была связь между этими таблицами - а именно по первичному ключу id - это мне нужно чтобы потом для конкретного project выводить свои tasks и соотвественно свои (или назначенные) users
 

Andkorol

Новичок
tasks связан только с одним конкретным projects и с несколькими users
Тогда и связывать их нужно по users:
`tasks`:
id | title | description | project_id
`link_table` `tasks_users`:
task_id | user_id

В любом случае – всё решается двумя запросами:
PHP:
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) . "')");
P.S.: про использование PDO – очень правильный совет.
 

Arramis

Новичок
я извиняюсь, некорректно сказал, я имел ввиду tasks связан c одним конкретным projects и несколькими users из этого projects - тоесть грубо основная задача у меня такая : сначала создаются юзера потом, создаются админы создают проекты, потом они назначают юзерам проекты, а юзеры в свою очередь создают tasks в проектах в которых назначались админами.

mysql_insert_id +1
 

Arramis

Новичок
юзеров трогать не нужно потому что они общие как для tasks так и для projects - мне нужно именно вот сделать привязку одного project с несколькими созданными (юзерами) tasks
 

Arramis

Новичок

Andkorol

Новичок
мне нужно именно вот сделать привязку одного project с несколькими созданными (юзерами) tasks
`tasks`:
id | title | description | project_id | ... user_id создателя таска, и т.д ...
Для получения списка всех тасков проекта, например с ID = 23:
SELECT * FROM `tasks` WHERE `project_id` = '23'.
 

Andkorol

Новичок
а причём здесб API для работы с mySQL если ошибка выводится со стороны субд? - тоесть у меня же ошибка именно в SQL запросе
mysql_query:
Данное расширение устарело, начиная с версии PHP 5.5.0, и будет удалено в будущем. Используйте вместо него MySQLi или PDO_MySQL. Смотрите также инструкцию MySQL: выбор API и соответствующий FAQ для получения более подробной информации. Альтернативы для данной функции:

mysqli_query()
PDO::query()
Это общая рекомендация, не относящаяся к твоей текущей проблеме.
 

Andkorol

Новичок
с выводом tasks для конкретного projects понятно, но как теперь добавлять (INSERT) tasks для конкретного project ?
`tasks`:
id | title | description | project_id
PHP:
mysql_query("INSERT INTO `nemanoedb`.`tasks` (`title`, `description`, `project_id`) 
VALUES ('" . mysql_real_escape_string($title) . "','" . mysql_real_escape_string($description) . "', '" . intval($project_id) . "')");
 
Сверху