gpt4 book ai didi

mysql - 如果不存在则添加行,或检索其 id 以供其他查询

转载 作者:行者123 更新时间:2023-11-30 00:15:39 24 4
gpt4 key购买 nike

这个问题混合了几个已经回答的问题,但我无法将所有答案放在一起以使其发挥作用。

我有三张 table :

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 检索它,但无法使其工作。

最佳答案

event_id 列是自动递增的吗?

如果您将其放在插入查询的末尾,即使事件中存在重复值,它也会为您提供 php 的 last_insert_id() 值。然后您可以使用它插入用户事件。

ON DUPLICATE KEY UPDATE event_id = LAST_INSERT_ID(event_id)

您必须在 mysql 表中为唯一列 (event_name) 创建一个唯一键才能使其工作。

关于mysql - 如果不存在则添加行,或检索其 id 以供其他查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23680558/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com