我想按客户端1、2、3,然后再次按客户端1、2、3等对我的结果进行排序。
有没有一种方法,而无需使用for循环或进行三个单独的查询?不仅如此,而且我正在处理分页数据,因此它需要返回x结果,但是要始终如一。
有任何想法吗?GROUP BY?
client_id project_id project_name
---------- ---------- ------------
1 42 project abc
2 49 project xyz
3 41 project 123
1 22 project apple
2 29 project orange
3 21 project banana
使用:
SELECT x.client_id,
x.project_id,
x.project_name
FROM (SELECT t.client_id,
t.project_id,
t.project_name,
CASE
WHEN @client_id != t.client_id THEN @rownum := 0
WHEN @client_id = t.client_id THEN @rownum := @rownum + 1
ELSE @rownum
END AS rank,
@client_id := t.client_id
FROM TABLE t,
(SELECT @rownum := 0, @client_id
ORDER BY t.client_id) r) x
ORDER BY x.rank, x.client_id
MySQL没有任何排名功能,但是幸运的是您可以使用变量。关键是在client_id与先前的client_id不匹配时重置@rownum值-
子查询中的ORDER BY是为了确保客户机顺序正确。
问题内容: 我想按客户端1、2、3,然后再次按客户端1、2、3等对结果进行排序。 有没有一种方法,而无需使用for循环或进行三个单独的查询?不仅如此,而且我正在处理分页数据,因此它需要返回x结果,但要始终如一。 有任何想法吗?GROUP BY? 问题答案: 采用: MySQL没有任何排名功能,但是幸运的是您可以使用变量。关键是在client_id与先前的client_id不匹配时重置@rownum
问题内容: 无论出于什么原因,我都需要两次通过mysql结果集。有办法吗?我不想运行两次查询,也不需要重写脚本,以便它将行存储在某处,然后在以后重用。 问题答案: 这是您可以执行的操作: 但是,我不得不说,这似乎不是解决此问题的正确方法。为什么不在第一个循环中进行处理?
我们使用Cassandra的用例是显示一篇博客文章的前10名最近访问者。以下是Cassandra表定义 现在,为了显示给定博客帖子的前10名最近访问者,需要在时间戳desc上有一个明确的“order by”子句。因为visted_ts不是Cassandra中集群列的一部分,所以我们无法完成这项工作。visited_ts不是集群列的一部分的原因是为了避免记录重复(读为重复)访问者。主键的设计方式是为
问题内容: 我有一个使用IN子句的存储过程。在我的ASP.NET应用程序中,我有一个多行文本框,可为存储过程提供值。我希望能够按在文本框中输入的值进行排序。我发现如何在mySQL中轻松地执行此操作(使用FIELD函数),而不是与SQL Server等效的方法。 所以我的查询看起来像: 因此,我将从应用程序中传递值,例如‘113113’,‘112112’,‘114114’(以任意顺序)。我想按该列表
问题内容: 当我使用IN从表中选择一组行时,例如 有一种SQL技巧可以按照IN集合中给定的顺序恢复它们吗? 因此,在示例中,假设x具有ID为23、55、44和12的行,则将按该顺序返回这四行。 问题答案:
我正在通过在标签提供程序中实现ITableColorProvider来为SWT/JFace表添加交替的行颜色,但是当表被排序或过滤时,表行颜色不会保持它们的位置。所以我会在白色行旁边有白色行,在灰色行旁边有灰色行。我猜这是因为我的元素被重新排列,行颜色也随之而来。这是我使用的在表被过滤或排序时不起作用的东西: 它工作得很好,直到通过排序或过滤更改表格。谢谢你的帮助。