【问题标题】:Order hybrid mixed mysql search result in one query?在一个查询中订购混合混合 mysql 搜索结果?
【发布时间】:2010-04-19 11:28:04
【问题描述】:

这个问题在客户端很容易解决。但为了性能,我想直接对数据库进行操作。

LIST a
+------+-------+-------+
| name | score | cre   |
+------+-------+-------+
| Abe  | 3     | 1     |
| Zoe  | 5     | 2     |
| Mye  | 1     | 3     |
| Joe  | 3     | 4     |

想要检索没有重复的连接混合结果。

Zoe (1st highest score)
Joe (1st last submitted)
Abe (2nd highest score)
Mye (2nd last submitted)
...

客户端我自己进行每个搜索并逐步执行它们。 但是在 100.000+ 上它变得很尴尬。能够使用 LIMIT 功能会轻松很多!

SELECT name FROM a ORDER BY score DESC, cre DESC;
SELECT name FROM a ORDER BY cre DESC, score DESC;

【问题讨论】:

  • 您好 Fredrik,您具体需要什么,您能解释一下吗?

标签: sql mysql


【解决方案1】:

MySQL 不提供 ROW_NUMBER 之类的解析函数。

实现这一点的一种方法是将两个具有不同Order By 的查询连接在一起:

Select s.name, s.score_num, c.cre_num
From
(
    Select name, @score_num := @score_num + 1 As score_num
    From your_table, ( SELECT @score_num := 0 ) v
    Order By score Desc
) s
Join
(
    Select name, @cre_num := @cre_num + 1 As cre_num
    From your_table, ( SELECT @cre_num := 0 ) v
    Order By cre Desc
) c
On ( c.name = s.name )

返回

name  score_num  cre_num
Joe           3        1
Mye           4        2
Zoe           1        3
Abe           2        4

这是你想要的吗?

【讨论】:

  • 是的,非常好的解决方案!通过加入数据,我可以选择如何衡量它们的重要性。最佳情况是我的情况实际上不是严格版本,而是求和版本。做得好! “SELECT [...] IF(s.score_num
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-07
  • 2022-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多