首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按某一行进行排序,以匹配特定条件,然后再为其他条件排序?

按某一行进行排序,以匹配特定条件,然后再为其他条件排序?
EN

Stack Overflow用户
提问于 2014-02-26 21:04:57
回答 2查看 44关注 0票数 0

我正在开发一个名为Fablelane的合作写作网站,人们可以在那里创建故事。现在,系统(当人们创建故事时)检测故事的语言,并将其保存在数据库中。

在头版(http://fablelane.com),有三个“值得注意的故事”。现在,它只选择了三个投票最高的故事,带有一个简单的ORDER BY条款。

但是如果有一个故事是用用户的语言写的(假设这是丹麦语- da_DK),那么我希望这三个故事中的第一个与用户的语言相匹配,而其余的则是英语。

换句话说:

  • 获得用用户语言编写的最高投票的故事。
    • 如果它存在,将其显示为第一个故事。

  • 然后得到3(或2,如果发现与语言匹配的最高投票的故事)用英语写的最高投票的故事,并显示这些。

这有意义吗?如果不是,这里有几个用例。

用例1:丹麦用户访问站点,但没有丹麦故事

  • 值得注意的故事#1:投票最多的故事是用英语写的。
  • 值得注意的故事2:第二高投票的故事是用英语写的。
  • 值得注意的故事#3:第三高投票的故事用英语写。

用例2:丹麦用户访问该站点,其中至少有一个丹麦故事可用

  • 值得注意的故事#1:最高投票的故事写丹麦语。
  • 值得注意的故事#2:最高投票的故事是用英语写的。
  • 值得注意的故事#3:第二高投票的故事写的英语。

用例3:访问站点的英语用户

这与用例1完全相同。

编辑1

让我们简单地说,每个故事的语言都存储在一个名为VARCHAR(MAX)Language列中,并且故事的表名为Story

获取用户语言的方式是通过ASP.NET MVC中的Request.UserLanguages属性。换句话说,它是一个字符串。为了简化示例中的操作,让我们假设它与Language列中的Story值完全匹配。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-26 21:27:18

对你的计划一无所知..。我认为实现这一目标的一种方法可能是产生两个结果集并将它们结合起来,并从中获得前3名。不过,这可能不是最好的方法,我相信查询可以写得更好(而且可能具有更好的性能)。

可能是这样的:

代码语言:javascript
复制
// first some sample data
declare @stories table (story varchar(20), lang char(2), votes int)
insert @stories values 
('Story 1', 'DK', 1),('Story 2', 'DK', 3),
('Story 3', 'EN', 4),('Story 4', 'EN', 3),
('Story 5', 'EN', 2),('Story 6', 'EN', 1)

// and the query
select top 3 * from (
    (select top 1 *, 1 as ranking from @stories where lang = 'DK' order by votes desc)
    union
    (select top 3 *, 2 as ranking from @stories where lang = 'EN' order by votes desc)
) x 
order by ranking, votes desc

样品SQL Fiddle.

这当然不适合你的具体情况,但它应该给你一个方法,可以工作的想法。

票数 1
EN

Stack Overflow用户

发布于 2014-02-26 21:25:38

以下是您想做的事情的一种方法:

代码语言:javascript
复制
select top 3 s.*
from ((select top 1 s.*, 1 as inlang
       from stories s
       where s.lang = @UserLang
       order by votes desc
      ) union all
      (select s.*, 0 as inlang
       from stories s
       where s.lang = 'English'
      )
     ) s
order by inlang desc, votes desc;

不过,我怀疑你还没有考虑到这样一个事实:所有投票最多的故事都是用用户语言写的。

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

https://stackoverflow.com/questions/22053234

复制
相关文章

相似问题

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