- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为了让这个更容易理解,我将提出与论坛完全相同的问题(实际的应用程序根本与论坛无关,但我认为这样的并行更容易对于我们大多数人来说,实际的应用程序是关于大多数程序员无法理解的非常具体的东西(这是一个为铁杆图形设计师设计的应用程序)。
假设有一个线程表存储有关每个论坛线程的信息,还有一个线程评级表存储每个用户的线程评级 (1-5)。为了提高效率,我决定在线程表中缓存评分平均值和投票数,并且触发器听起来是更新它的好主意(我曾经在实际应用程序代码中执行此类操作,但我认为触发器值得一试,尽管调试危险)。
如您所知,MS SQL Server 不支持按行执行触发器,它必须按语句执行。所以我尝试这样定义它:
CREATE TRIGGER thread_rating ON threadrating
AFTER INSERT
AS
UPDATE thread
SET
thread.rating = (thread.rating * thread.voters + SUM(inserted.rating))/(thread.voters + COUNT(inserted.rating)),
thread.voters = thread.voters + COUNT(inserted.rating)
FROM thread
INNER JOIN inserted ON(inserted.threadid = thread.threadid)
GROUP BY inserted.threadid
但我收到“GROUP BY”子句的错误(这是我所期望的)。问题是,我怎样才能做到这一点?
抱歉,如果这个问题很愚蠢,但这是我第一次真正尝试使用触发器。
附加信息:线程表将包含threadid(int,主键),评级(float),voters(int)和一些与当前问题无关的其他字段。thread rating表只包含threadid(外键)、userid(users表主键的外键)和 rating(1到5之间的tinyint)。
错误消息是“关键字“GROUP”附近的语法不正确。”
最佳答案
首先,我强烈建议您不要使用触发器。
如果出现语法错误,请检查括号以及开始
/结束
是否平衡。就您而言,您有一个 end
(在末尾)但没有开始。您只需删除 end
即可修复此问题。
修复此问题后,您可能会收到更多错误,例如“列 x,y,z 不在聚合或分组依据中”。那是因为您有几列都不在其中。您需要将 thread. rating、thread.voters 等添加到您的组中,或者对它们执行某种聚合。
这一切都假设有多个记录具有相同的threadID(即,它不是主键)。如果情况并非如此,那么分组依据的目的是什么?
<小时/>编辑:
我被语法错误难住了。我用几个相关的子查询解决了这个问题。我猜到了您的表结构,因此根据需要进行修改并尝试以下操作:
--CREATE TABLE ThreadRating (threadid int not null, userid int not null, rating int not null)
--CREATE TABLE Thread (threadid int not null, rating int not null, voters int not null)
ALTER TRIGGER thread_rating ON threadrating
AFTER INSERT
AS
UPDATE Thread
SET Thread.rating =
(SELECT (Thread.Rating * Thread.Voters + SUM(I.Rating)) / (Thread.Voters + COUNT(I.Rating))
FROM ThreadRating I WHERE I.ThreadID = thread.ThreadID)
,Thread.Voters =
(SELECT Thread.Voters + COUNT(I.Rating)
FROM ThreadRating I WHERE I.ThreadID = Thread.ThreadID)
FROM Thread
JOIN Inserted ON Inserted.ThreadID = Thread.ThreadID
如果这就是您想要的,那么我们可以检查性能/执行计划并根据需要进行修改。我们也许可以让它与团队一起工作。
<小时/>触发器的替代方案
如果您更新的数据仅影响少数选定位置的评分,我建议您直接在那里更新评分。将逻辑分解到触发器中很好,但会带来很多问题(性能、可见性等)。这可以通过函数来帮助。
考虑一下:每次有人触摸该表时,您的触发器都会执行。浏览次数、上次更新日期等都会执行此触发器。在这些情况下,您可以添加逻辑来短路触发器,但它很快就会变得复杂。
关于sql-server - MS SQL Server 触发器更新项目评级和票数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/754217/
我正在使用 MySQL 和 PHP 为 Flash 游戏构建数据层。检索关卡列表非常简单,但我在尝试获取关卡的平均评分及其指针信息时遇到了障碍。这是一个示例数据集: 级别表: level_id | l
阅读 schema.org 之后我写了一个小的“丰富代码片段”或者它所谓的什么。我们今天被谷歌找到,但没有显示星级和评级。也许有人对此有经验并且知道事情是如何完成的?它仅取决于微数据还是取决于 中的
有没有一种方法(或 API)可以使远程 SMF 站点排队以获取特定时间范围内的热门/热门主题,比如过去 24 小时?如果没有,关于我如何跟踪它有什么建议吗? 最佳答案 不确定这是否可行,但我知道 SM
有谁知道如何使用 Foursquare API 获取 field 的分数/评级(例如 9.0/10)? 我正在通过无用户访问进行连接。 https://developer.foursquare.com
我正在使用 Sonar 来分析一组相关的项目。 我正在使用 SQALE 评级来证明重构的必要性 我的问题是 SQALE 到技术债务比率映射背后的逻辑是什么? 为什么 SQALE A 评级是技术债务,范
我有一份 FIFA 19 两名球员之间的比赛列表,我希望根据所参加的比赛使用该数据更新我在这两名球员之间的 ELO 评分。我正在尝试使用此数据不断更新最初从 1000 开始的 ELO 评级。 我尝
我无法显示评级元素。它根本就没有出现。所有其他事情都很好 我已经正确地链接了这些: 语义用户界面 CSS ( http://semantic-ui.com/dist/semantic.min.css
我正在开发一个 Java 应用程序,其中涉及使用 Foursquare 来搜索 field 。该应用程序预计也会对场馆进行评级。除了场馆的收视率之外,我已经做了所有我需要做的事情。我阅读了利用 fou
由于我公司的一位客户要求标记图像上的 alt 属性,我遇到了 google maps API 的问题。 我在谷歌官方文档中找不到任何内容(即:https://developers.google.com
有人可以给我一个 onRate() 的例子吗? Semantic UI 中评级小部件的回调函数 ( http://semantic-ui.com/modules/rating.html#/settin
我有四个主表- 1.user(user_id, name,...) 2. post(post_id, description, ...) 3.comment(comment_id,user_id,co
我已登录并获取身份验证 token ,但当我单击“赞”按钮时,YouTube 评级不起作用。我还需要做什么才能让它发挥作用?如果我在网络浏览器中使用该网址,它会要求授权并执行,然后它就可以工作。但从应
我正在使用我在网上找到的一些评级系统 CSS。目前我能够让它工作,但是当显示多个评级时会出现问题。 只有最后一个分级类有效。 .rate { float: left; pointer-even
我安装了一个应用程序 django- ratings。我想要syncdb,但这是我的错误: djangoratings.vote: 'user' defines a relation with the
每个人都喜欢在他们的网站上显示 Digg/Tweet/Like 徽章,而 Disqus Comment System开始接管。 (来源:disqus.com) (来源:digg.com) 从开发人员的
我有一个 Bootstrap Rating 组件,我必须使用 on-leave 方法来调用我的 javascript 函数。除了 IE 之外,所有其他浏览器也在单击事件上执行 on-leave 函数。
我正在用 Rating Bootstrap 做一个 MVC 应用程序。 我也定义了这个...为了知道点击了多少开始。 $(document).ready(function () {
我想按人口统计(性别、年龄组)收集 IMDb 评级详细信息。 当我尝试在 imdbpy 中使用 get_movie_vote_details 模块时,我的输出为空。这是我的代码: import im
我正在尝试使用 PHP 和 SoapClient 来利用 UPS Ratings 网络服务。我找到了一个名为 WSDLInterpreter 的好工具来创建用于创建服务请求的起点库,但无论我尝试什么,
我正在尝试向现有表格添加“评级”系统(即 1 星、2 星或差、一般、好、优秀等)。有谁知道在 .Net 或免费的第 3 方控件中通过良好的 UX 实现美观的方法? 谢谢 最佳答案 检查 ASP.NET
我是一名优秀的程序员,十分优秀!