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

Тема в разделе "Базы данных", создана пользователем Eratt, 14 окт 2013.

Модераторы: latteo
  1. Eratt

    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
     
  2. mektek

    mektek Писатель

    Регистр.:
    11 окт 2013
    Сообщения:
    8
    Симпатии:
    0
    Сделай двумя запросами – в чём проблема-то..?
    В INSERT не должно быть никаких условий WHERE.
     
  3. Eratt

    Eratt Создатель

    Регистр.:
    27 фев 2009
    Сообщения:
    43
    Симпатии:
    0
    В INSERT не должно быть никаких условий WHERE.
    тогда я так полагаю надо будет вместо второго INSERT делать UPDATE ? и плюс ещё два запроса на вставку в tasks и в link_table - многовато получается запросов
     
  4. mektek

    mektek Писатель

    Регистр.:
    11 окт 2013
    Сообщения:
    8
    Симпатии:
    0
    Не совсем понятна из описания задачи сама необходимость разделения данных на две таблицы.
    task может быть связан с несколькими project или user?
     
  5. Eratt

    Eratt Создатель

    Регистр.:
    27 фев 2009
    Сообщения:
    43
    Симпатии:
    0
    tasks связан только с одним конкретным projects и с несколькими users - я делю данные на две таблицы чтобы была связь между этими таблицами - а именно по первичному ключу id - это мне нужно чтобы потом для конкретного project выводить свои tasks и соотвественно свои (или назначенные) users
     
  6. mektek

    mektek Писатель

    Регистр.:
    11 окт 2013
    Сообщения:
    8
    Симпатии:
    0
    Тогда и связывать их нужно по 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) . "')");
     
  7. Eratt

    Eratt Создатель

    Регистр.:
    27 фев 2009
    Сообщения:
    43
    Симпатии:
    0
    я извиняюсь, некорректно сказал, я имел ввиду tasks связан c одним конкретным projects и несколькими users из этого projects - тоесть грубо основная задача у меня такая : сначала создаются юзера потом, создаются админы создают проекты, потом они назначают юзерам проекты, а юзеры в свою очередь создают tasks в проектах в которых назначались админами.

    mysql_insert_id +1

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

    mektek Писатель

    Регистр.:
    11 окт 2013
    Сообщения:
    8
    Симпатии:
    0
    Для получения списка всех тасков проекта, например с ID = 23:
    SELECT * FROM `tasks` WHERE `project_id` = '23'
    .
     
  9. mektek

    mektek Писатель

    Регистр.:
    11 окт 2013
    Сообщения:
    8
    Симпатии:
    0
    Используй PDO, через него можно
     
  10. Eratt

    Eratt Создатель

    Регистр.:
    27 фев 2009
    Сообщения:
    43
    Симпатии:
    0
    а причём здесб API для работы с mySQL если ошибка выводится со стороны субд? - тоесть у меня же ошибка именно в SQL запросе