首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Gaming.SE上查找糟糕的“我的世界”问题

在Gaming.SE上查找糟糕的“我的世界”问题
EN

Code Review用户
提问于 2015-10-12 22:42:38
回答 2查看 1.4K关注 0票数 17

这篇文章的序言部分,我将在这里解释一下“背景故事”。Stack网站Gaming.SE,也被称为Arqade,对于流行的视频游戏“我的世界”,经常会有很多不好的问题。这些问题中有很多是很容易在搜索引擎上找到的,非常不清楚,以前有人问过,把Arqade当作论坛对待,或者要求用户支持,只有游戏的生产商才能提供。有几个例子可以包括:

  1. 在我的世界里最好的生物群落是什么?
  2. 在1.9之后无法登录到我的帐户
  3. 学校里没有.Minecraft文件夹
  4. 我要做什么TNT?
  5. 如何在无菌的情况下培育赫罗比林?

查询本质上是以如下方式进行搜索:

  • 它使用类似于%minecraft%%minecraft-%%的标记查找问题。
  • 它检查它是否有低于-1的分数。
  • 它检查以确保这篇文章没有被删除。
  • 它会检查它是被关闭了还是没有关闭。

我想知道以下几点:

  • 有什么方法可以使这个更短,更少的重复?
  • 是否有多余的检查不需要?
  • 有任何支票会引起问题吗?
  • 还要别的吗?

下面是代码和查询链接

代码语言:javascript
复制
SELECT
    Id AS [Post Link]
  , OwnerUserId AS [User Link]
  , Score
FROM Posts WHERE
  DeletionDate IS NULL
  AND Score <= -1
  AND (
    Tags LIKE '%minecraft-%%'
    OR Tags LIKE '%minecraft%'
  )
  AND (
    ClosedDate IS NULL 
    OR ClosedDate IS NOT NULL
  );


SELECT
  COUNT(*)
FROM Posts WHERE
  DeletionDate IS NULL
  AND Score <= -1
  AND (
    Tags LIKE '%minecraft-%%'
    OR Tags LIKE '%minecraft%'
  )
  AND (
    ClosedDate IS NULL 
    OR ClosedDate IS NOT NULL
  );
EN

回答 2

Code Review用户

回答已采纳

发布于 2015-10-13 00:46:56

在Post上使用标记字段是查询的一个糟糕的选择。它依赖于表格扫描,这是缓慢的,因为它必须检查每一个问题。注意,您可以使用<>字符来识别标签列中的开始值和结束值,但是,正如我所说的,不要使用该列。

相反,您应该使用PostTagsTags表进行连接。使用CTE简化查询是有意义的。

我真的不喜欢SQL的大写风格,但意识到没有标准。如果你能改变标准,请用小写表示关键词.它使列名和表名更易于查看(而这些是重要的部分)。不过,如果你的大写是一致的,你就会得到+1。持之以恒是很重要的,你做到了。

注意,Posts表没有已删除的帖子,也没有删除的帖子。根本没有必要检查DeletedDate

因此,将标签加入到PostTags中,你就可以得到有“我的世界”标签的帖子。加入到帖子中,你就可以测试分数和闭包了。

以下是未封闭的,得分低的,与我有关的帖子。

代码语言:javascript
复制
WITH mctags AS (
  SELECT Id AS tid
  FROM Tags
  WHERE TagName LIKE 'minecraft%'
), mcqs AS (
  SELECT DISTINCT PostId
  FROM PostTags INNER JOIN mctags ON TagId = tid
)
SELECT
    Id AS [Post Link],
    OwnerUserId AS [User Link],
    Tags,
    Score
FROM Posts
INNER JOIN mcqs ON Id = PostId
WHERE Score <= -1
  AND ClosedDate IS NULL
  AND PostTypeId = 1

注意,我试着继续使用你的大写关键词.不顾我自己;-)

嗯,一些笔记:

  • 你的文字说你检查“低于-1”的问题,而你的代码检查“0以下”的问题.<<=是有区别的。
  • 它不检查邮件的关闭状态。如果要查看当前打开的帖子是否在过去关闭,则需要检查PostHistory表。
票数 15
EN

Code Review用户

发布于 2015-10-13 00:16:34

这根本没什么用。

ClosedDate为空或ClosedDate为非空

说“何去何从”导致的结果和根本不包括声明是一样的。要么你没有得到正确的结果,要么这个可以被删除。

票数 11
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/107324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档