gpt4 book ai didi

mysql - SQL - 缩短查询

转载 作者:行者123 更新时间:2023-11-29 05:37:29 24 4
gpt4 key购买 nike

我的网站上有一个类似于 Stack Overflow 的信誉系统,成员(member)可以通过完成不同的任务获得积分。其中一项任务是对博客文章发表评论。

我只想给我的用户 5 分,因为他对一篇文章发表了 1 条评论。如果他们对同一篇文章写了额外的评论,或者回复了该文章中的其他评论,他们仍然应该只获得前 5 分。

为此,我首先查询了 blog_comments 表,检查该成员之前是否已经对该文章发表过评论,如果没有,在另一个查询中,我会将这 5 点添加到 members_reputation 表中。我下面的示例显示了这一点:

SELECT COUNT(*) AS duplicates_found FROM blog_comments
WHERE member_id = 12722 AND article_id = 30202

// in my server-side language I would have
// if duplicates_found = 0 then

INSERT INTO members_reputation (member_id, awarded_for, awarded_when, awarded_what)
VALUES (12722, 'Posted a comment', Now(), 5)

有没有办法将这两个查询缩短为一个?我正在考虑将选择查询作为子查询添加到我的插入查询中,但老实说,这让我很困惑,因为我什至不确定我是否可以同时使用 INSERT 和 WHERE,可以吗?

无论如何,我们总是非常感激地收到任何建议。

我的答案

感谢 Michael 的友好回答,我的问题的答案是:

INSERT INTO members_reputation (member_id, awarded_for, awarded_when, awarded_what)
SELECT 12722, 'Posted a comment', Now(), 5 FROM DUAL
WHERE NOT EXISTS
(
SELECT * FROM blog_comments
WHERE member_id = 12722 AND article_id = 30202
)

最佳答案

试试这个:

INSERT INTO members_reputation (member_id, awarded_for, awarded_when, awarded_what)
select 12722, 'Posted a comment', Now(), 5
where not exists
(
select * FROM blog_comments
WHERE member_id = 12722 AND article_id = 30202
)

更新:

@MartinG 我的盒子里没有 MySQL。我在 http://sqlzoo.net 上试过了不过,似乎 MySQL 就像 Oracle,没有源表的 SELECT 需要一个虚拟表,您可以使用 DUAL 表代替虚拟表

select 'hello' as "No, it is right!" from dual where 
exists( SELECT * FROM bbc
WHERE name = 'China')

关于mysql - SQL - 缩短查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9510351/

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