gpt4 book ai didi

sql - 多次插入SQLite从其他表获取数据

转载 作者:行者123 更新时间:2023-12-03 18:49:38 25 4
gpt4 key购买 nike

在SQLite中,我有一个简单的留言板,当每个用户第一次看到任何帖子时,我都想在上面打上时间戳。

CREATE TABLE messages (
message_id INTEGER PRIMARY KEY,
mb_topic_id INTEGER NOT NULL REFERENCES mb_topics(mb_topic_id),
message_poster INTEGER NOT NULL REFERENCES users(user_id),
message_content TEXT,
message_post_time TIMESTAMP DEFAULT (strftime('%s', 'now'))
)

CREATE TABLE messages_seen (
message_id INTEGER NOT NULL REFERENCES messages(message_id),
user_id INTEGER NOT NULL REFERENCES users(user_id),
seen_time TIMESTAMP DEFAULT (strftime('%s', 'now')),
UNIQUE (message_id, user_id)
)


我想做的是,在一条SQL语句中,如果可能的话,是当用户加载消息线程时,将每个与 INSERT OR IGNORE匹配的 messages_seen放入 userID他们的 message_id(我拥有)我有)。

因此,如果user_id为4且mb_topic_id为7,则可以执行以下操作:

SELECT message_id FROM messages WHERE mb_topic_id = 7


这可能返回类似(9,11,14,26)的信息。然后我会做:

INSERT OR IGNORE INTO messages_seen (message_id, user_id) VALUES (9,4);
INSERT OR IGNORE INTO messages_seen (message_id, user_id) VALUES (11,4);
INSERT OR IGNORE INTO messages_seen (message_id, user_id) VALUES (14,4);
INSERT OR IGNORE INTO messages_seen (message_id, user_id) VALUES (26,4);


有没有办法将其压缩为一个陈述?顺便说一句,我正在其上运行的服务器正在运行SQLite 3.6.20。

最佳答案

[编辑:有关SQLite 3.7.11的不相关建议已删除]

您可以将insert-select与用户标识一起用作文字:

INSERT OR IGNORE INTO messages_seen (message_id, user_id) 
SELECT message_id, 4
FROM messages
WHERE mb_topic_id = 7

关于sql - 多次插入SQLite从其他表获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30605280/

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