这个问题混合了已经回答的几个问题,但我不能将所有答案放在一起以使其有效。
我有三张桌子:
表 users
:
| user_id | user_name |
表 events
:
| event_id | event_date | event_name |
表 user_event
:
| user_id | event_id |
表 user_event
是前面表中的子项,并将用户与事件相关联(将外键定义到其父表,ON DELETE CASCADE
)。
每个用户都可以添加一个活动,但如果该活动已经存在,则不会在表格 events
中创建副本,但仍会在<已保存事件user_event
和现有 user_id
的强> event_id
。
代码我只需要添加一个事件,如果事件尚未存在:
INSERT INTO `events` (`event_id`, `event_date`, `event_name`)
SELECT * FROM (SELECT 'event_1', '2014-05-20', 'Meeting') AS tmp
WHERE NOT EXISTS (
SELECT `event_id`, `event_date`, `event_name`
FROM `events`
WHERE `event_name` = 'Meeting'
AND `event_date` = '2014-05-20')
LIMIT 1;
然后我想将它保存到user_event表中,以便我知道此用户将参加此事件:
INSERT INTO `user_event` (`user_id`, `event_id`) VALUES ('user_1', 'event_1');
如果它是一个新事件,一切都很好,因为我事先知道事件ID但是如果另一个用户正在创建一个已经存在的事件:
user_2
创建以下事件(与之前插入的相同,但ID不同):
`event_name` = 'Meeting'
`event_date` = '2014-05-20'
`event_id` = 'event_2'
我想在表user_event
中插入以下条目:
| user_2 | event_1 |
也许可以将这些查询组合成一个和用户的sql变量,或者可以通过定义id = last_insert_id(id)
并在提交第二个查询之前通过php检索它,但不能使它工作。
答案 0 :(得分:0)
event_id列是自动增量吗?
如果你把它放在插入查询的末尾,它会给你一个php的last_insert_id()值,即使事件中有重复值。然后,您可以使用它插入用户事件。
ON DUPLICATE KEY UPDATE event_id = LAST_INSERT_ID(event_id)
您必须在mysql表中为唯一列(event_name)创建一个唯一键才能使其生效。