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

Ответить
mkden
Сообщения: 96
Зарегистрирован: 08.05.2010
В общем есть две таблицы

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')
Пробывал через инерждоин не получается!
p.s: В php я нуб!!! )

Аватара пользователя
SLITE
Сообщения: 203
Зарегистрирован: 01.01.2010
а что мешает создать два раздельных запроса?

Аватара пользователя
Distructor
Администратор
Сообщения: 1607
Зарегистрирован: 28.12.2009
повесить триггер, который будет срабатывать при добавлении в таблицу 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
Сообщения: 96
Зарегистрирован: 08.05.2010
повесить триггер, который будет срабатывать при добавлении в таблицу users и вставлять запись в таблицу forumusers.
или же просто после вставки в таблицу users получать номер вставленной записи ( $user_id = mysql_insert_id(); ) и вставлять во вторую таблицу с этим идом.
А для моих баз данных пример можно?
p.s: В php я нуб!!! )

Аватара пользователя
AgentSIB
Сообщения: 329
Зарегистрирован: 17.05.2010
Не нужны никакие тригеры! Делай инсерны отдельно, убережет от ошибок! Если нужно получить только что вставленный id используй mysql_insert_id для получения только что вставленного id.
Frustra fit per plura quod potest fieri per pauciora © Закон "Бритвы Оккама"

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

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

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';");

Ответить