在PostgreSQL中,当指定多列的组合时PRIMARY KEY,如何排序记录?
这是假设PostgreSQL按主键的顺序排序记录.可以?
另外,在PostgreSQL的情况下,主键是否自动编入索引?
我有一个rails应用程序:
user has_many :projects
user has_many :tasks, :through => :projects
project has_many :tasks
每项任务都有一个里程碑日期.
要显示我正在使用的下一个里程碑日期的项目详细信息表:
@projects = current_user.tasks.joins(:project).select("distinct on (projects.id) projects.*, tasks.*").reorder("projects.id, tasks.milestone ASC")
Run Code Online (Sandbox Code Playgroud)
这很好用.
我现在希望能够对表列进行排序.
根据Postgres DISTINCT ON不可排序,你必须将它包装在另一个select语句中,即SELECT * FROM (SELECT DISTINCT ON....) ORDER BY column_3
我确实认为订购的列可以根据需要在SQL中使用,即(按项目名称DESC排序):
@projects = current_user.tasks.joins(:project).select("distinct on (projects.name) projects.*, tasks.*").reorder("projects.name DESC, tasks.milestone ASC")
Run Code Online (Sandbox Code Playgroud)
哪个有效,但我也希望能够通过里程碑进行排序,但这样做不起作用.
有人能告诉我如何转换我的rails查询,以便可以通过任何列进行排序吗?
UPDATE
我想我的问题很简单我怎么在周围包裹一个ActiveRecord的查询SELECT和ORDER BY?
我想我已经成功实现了它:
inner_query = current_user.tasks.select("distinct on (projects.id) projects.*, tasks.*").reorder("projects.id, tasks.milestone ASC").to_sql
@projects = Task.paginate_by_sql("select * from (#{inner_query}) as user_projects order by user_projects.name", …Run Code Online (Sandbox Code Playgroud) 这是我的查询
(SELECT * FROM `jokes` WHERE `flags` < 5 AND (`title` LIKE "%only three doors%" OR `joke` LIKE "%only three doors%") ORDER BY `ups` DESC,`downs` ASC)
UNION
(SELECT * FROM `jokes` WHERE `flags` < 5 AND (`title` LIKE "%only%" OR `joke` LIKE "%only%") ORDER BY `ups` DESC,`downs` ASC)
UNION
(SELECT * FROM `jokes` WHERE `flags` < 5 AND (`title` LIKE "%three%" OR `joke` LIKE "%three%") ORDER BY `ups` DESC,`downs` ASC)
UNION
(SELECT * FROM `jokes` WHERE `flags` < 5 AND …Run Code Online (Sandbox Code Playgroud) 我正在使用Rails 3.2.13和Rails Asset Pipeline.我想使用资产管道,所以我可以使用SASS和CoffeeScript和ERB作为我的资产,并让Pipeline自动编译它们,所以我不能在开发中关闭管道.我不是在开发中预编译资产,甚至没有public/assets/目录.
但是,当我对包含文件进行更改时,例如对_partial.html.erb文件中包含(呈现)的layout.html.erb文件进行更改,而不更改执行包含本身的文件(在此示例中layout.html.erb),Sprockets不检测更改并使其无效缓存,所以我不断得到相同的陈旧文件.当我在积极开发中执行此操作时,我想禁用任何资产缓存,以便我可以对每个请求进行更改,但我无法弄清楚如何执行此操作.我在我的设置中设置了以下所有内容development.rb:
config.action_controller.perform_caching = false
config.action_dispatch.rack_cache = nil
config.middleware.delete Rack::Cache
config.assets.debug = true
config.assets.compress = false
config.cache_classes = false
Run Code Online (Sandbox Code Playgroud)
尽管如此,即使这样,文件也会显示在下面tmp/cache/assets/,tmp/cache/sass/并且未来的请求也无法进行更改.现在我每次想要看到更改时都必须手动删除这些目录.
不幸的是,资产管道RoR指南的How Caching Works部分的全部内容是:
Sprockets使用默认的Rails缓存存储来缓存开发和生产中的资产.
TODO:添加有关更改默认商店的更多信息.
那么,我如何让Sprockets按需编译资产但不缓存结果呢?
我有这样的对象:
students = {name: 'Aa_Student', class: 'A_Class'},
{name: 'Ab_Student', class: 'A_Class'},
{name: 'Ac_Student', class: 'B_Class'},
{name: 'Ba_Student', class: 'B_Class'},
{name: 'Bb_Student', class: 'C_Class'},
{name: 'Bc_Student', class: 'C_Class'}
Run Code Online (Sandbox Code Playgroud)
假设学生对象被洗牌了.我使用ng-repeat来显示数据.我想按自定义顺序对对象进行排序.
例如,我想显示如下数据:
Name Class
-----------------------------
Ac_Student B_Class
Ba_Student B_Class
Aa_Student A_Class
Ab_Student A_Class
Bb_Student C_Class
Bc_Student C_Class
Run Code Online (Sandbox Code Playgroud)
所以基本上,我想按学生的班级排序,但它首先是B_Class,然后是A_Class,然后是C_Class.另外,我想按字母顺序按学生姓名订购.我怎样才能做到这一点?
HTML:
<table>
<tr ng-repeat="student in students | orderBy:customOrder">
...
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
控制器:
$scope.customOrder = function(student) {
$scope.students = $filter('orderBy')(student, function() {
});
};
Run Code Online (Sandbox Code Playgroud) 我只是在学习RoR所以请耐心等待.我试图用字符串写一个if或语句.这是我的代码:
<% if controller_name != "sessions" or controller_name != "registrations" %>
Run Code Online (Sandbox Code Playgroud)
我尝试了许多其他方法,使用括号,||但似乎没有任何工作.也许是因为我的JS背景......
如何测试变量是否不等于字符串1或字符串2?
我有一个MySql查询,按no列命令我的结果(int,可以为null).简单的例子:
SELECT * FROM table ORDER BY no ASC
我想得到一个类似的结果集
1, 2, 3, 10, 52, 66, NULL, NULL, NULL
但我明白了
NULL, NULL, NULL, 1, 2, 3, 10, 52, 66
是否可以使用SQL查询?
是否有一些方法可以使SQL Server Management Studio默认返回行降序?每次我通过菜单打开一个表(例如通过选择返回所有行),我得到顶部最旧的行.我知道我可以在sql语句中添加'order by desc',但输入会变得烦人:)
我有很多处理特定消息类型的处理程序类.要注册所有这些处理程序,我需要知道存在哪些处理程序.目前,它们都使用特定的注释进行注释,并且我使用Java 6注释处理器来获取所有这些注释,并创建一个包含每个注释类型的实例的Register类.
如果整个树一次构建,这很有效,但如果只构建一个带注释的类(例如,当我在Eclipse中保存文件时),处理器只能看到该类型,并构建一个不完整的Register.如何检查此方案中的其他类型?
我特别想知道PostgreSQL.鉴于以下人为的例子:
SELECT name FROM
(SELECT name FROM people WHERE age >= 18 ORDER BY age DESC) p
LIMIT 10
Run Code Online (Sandbox Code Playgroud)
从外部查询返回的名称是否保证按内核查询的顺序排列?
sql-order-by ×5
mysql ×2
postgresql ×2
ruby ×2
activerecord ×1
android ×1
angularjs ×1
dalvik ×1
distinct-on ×1
if-statement ×1
logic ×1
primary-key ×1
rack ×1
select ×1
sorting ×1
sprockets ×1
sql ×1
sql-server ×1
ssms ×1
subquery ×1
union ×1