INSERT в две таблицы одновременнно!

mkden
В общем есть две таблицы

users - с полями login,password,email
и

forumusers - с полями username,password,email

login=username

как сделать одновременный insert в обе таблицы(и чтобы айди записи в обеих таблицах были одинаковы)?

сейчас все заноситься только в одну таблицу таким способом

Код: Выделить всё

$result = mysql_query ("INSERT INTO users (login,password,email) VALUES('$login','$password','$email',NOW())");
if ($result=='TRUE')
Пробывал через инерждоин не получается!
Вернуться к началу

SLITE
а что мешает создать два раздельных запроса?
Вернуться к началу

Distructor
Администратор
повесить триггер, который будет срабатывать при добавлении в таблицу users и вставлять запись в таблицу forumusers.
или же просто после вставки в таблицу users получать номер вставленной записи ( $user_id = mysql_insert_id(); ) и вставлять во вторую таблицу с этим идом.


хотя если это все твои проекты, то правильнее иметь одну таблицу пользователей чтобы не заморачиваться лишний раз (например когда пользователь попробует сменить пароль, тебе нужно будет менять пароль во всех своих таблицах пользователей).

если хочется разных дополнительный набор полей в зависимости от проекта, то можешь сделать таблицы вида:

Код: Выделить всё

users
  user_id
  user_name
  user_pass
  user_email

forumusers
  forumuser_id
  forumuser_name
т.е. одна с основными данными пользователя, а вторая дополнительная, в которой содержатся поля специфичные для форумного подпроекта

и выбирать данные по пользователям для форума как

Код: Выделить всё

SELECT * FROM users u
INNER JOIN forumusers fu ON fu.forumuser_id = u.user_id
или вообще просто добаить поле forum_username в таблицу users


в общем вариантов много, какой выбрать зависит от конкретики задачи
Вернуться к началу

mkden
повесить триггер, который будет срабатывать при добавлении в таблицу users и вставлять запись в таблицу forumusers.
или же просто после вставки в таблицу users получать номер вставленной записи ( $user_id = mysql_insert_id(); ) и вставлять во вторую таблицу с этим идом.
А для моих баз данных пример можно?
Вернуться к началу

AgentSIB
Не нужны никакие тригеры! Делай инсерны отдельно, убережет от ошибок! Если нужно получить только что вставленный id используй mysql_insert_id для получения только что вставленного id.
Вернуться к началу

Distructor
Администратор
триггеры конечно далеко не лучшее решение в твоем случае, но в целях расширения твоих знаний приведу пример:

Код: Выделить всё

delimiter $$

DROP TRIGGER `users_insert`$$

CREATE TRIGGER users_insert AFTER INSERT ON users 
  FOR EACH ROW BEGIN
    INSERT INTO forumusers SET username=NEW.login, password=NEW.password, email=NEW.email;
  END;
$$

delimiter ;
а вот получение ида вставленной записи (если ид в users автоинкриментный, а в forumusers нет) внутри триггера будет посложнее



пример по mysql_insert_id (user_id в таблице users автоинкриментный)

Код: Выделить всё

mysql_query("INSERT INTO users SET login='login', password='pass', email='email@aa.aa';");
$user_insert_id = mysql_insert_id();
mysql_query("INSERT INTO forumusers SET user_id=$user_insert_id, username='login', password='pass', email='email@aa.aa';");
Вернуться к началу