gpt4 book ai didi

php - 当从另一个表中选择没有要加入的行时,将行插入表中

转载 作者:搜寻专家 更新时间:2023-10-30 23:38:40 24 4
gpt4 key购买 nike

我们有一个保存消息的 messages 表,还有一个保存用户与每个 message 的个人交互的 message_statuses 表/p>

messages 表有一条用户应该在应用程序中看到的消息。当他们从我们的 API GET 消息时,我们想在 messages_status 表中创建一个新行来跟踪该表上的用户 ID 和已读/已读状态,以便我们可以确定何时向他们显示消息和天气或不将其标记为看不见并显示通知气泡。

当我们选择用户应该收到的消息时,我知道我可以像这样加入 message_id

SELECT * FROM messages AS a JOIN message_statuses AS b ON a.id = b.message_id;

但是如果 messages 中添加了一条新消息,而我们还没有向 message_statuses 表中添加新行来开始跟踪该用户与该用户的交互message 然后我们要添加一个新行,以便我们可以跟踪打开/阅读状态以及删除状态。

有没有一种方法可以使用子查询,不仅可以使用该连接进行选择,还可以在 message_statuses 表中没有行时插入新行?

我在这里看到这个页面 http://dev.mysql.com/doc/refman/5.7/en/insert-select.html但我无法理解这是否对我们有用。

我们使用的是 PHP,所以我知道我可以通过一些单独的查询来解决这个问题,但我真的很想知道我们是否可以在一个查询中解决这个问题。我知道我已经看到 insert on duplicate key 似乎也可以工作,但我不是很熟悉。

[更新]

我试过在 sql 运行之前添加这个触发器

$trigger = "CREATE TRIGGER insert_status_row AFTER SELECT ON text2bid_messages
FOR EACH ROW
BEGIN
IF selected.opened IS NULL THEN
INSERT INTO text2bid_message_statuses (user_id, message_id) = ($user_id,selected.id);
END IF;
END";
mysql_query($trigger);

但是到目前为止这似乎并没有做我们需要的事情,也许我添加了错误的触发器?似乎我无法在选择时触发?

最佳答案

首先,您可以使用 left join 获取所有消息:

SELECT *
FROM messages m LEFT JOIN
message_statuses ms
ON m.id = ms.message_id;

message_status 中的列将为 NULL

如果您想在每次创建新消息时将记录插入message_status,您可以使用插入触发器来实现。

关于php - 当从另一个表中选择没有要加入的行时,将行插入表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38019511/

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