我在出版物管理应用程序中工作。根据业务逻辑,如果出版物的文本具有等于或高于75%的相似性水平,则该出版物可属于另一出版物。因此,在数据库中,我在publications
表上创建了一个自我关系。
到目前为止,我有以下完美的查询:
SELECT
publications.id, publications.body,
similar_publications.id similar_id, similar_publications.body similar_body
FROM publications
LEFT JOIN publications similar_publications
ON similar_publications.id = publications.publication_id
WHERE publications.id = <an-id-here>;
问题是我想&#34;转换&#34;这个查询Sequel的DSL,只是为了简单地调用我的模型:Publication.including_similar_publications.where('publications.id = ?', 1)
我知道我需要在我的模型中创建这个方法。我怀疑是:如何?在续集中是否有与ActiveRecord
命名范围类似的内容?另一个问题是因为我的查询是SELF JOIN
,我需要在LEFT JOIN
上使用别名... Sequel是否允许我按照我在查询中公开的方式使用别名?如果有,怎么样?
答案 0 :(得分:1)
您只需在加入期间为表格添加别名:
class Publication < Sequel::Model
dataset_module do
def including_similar_publications
select{[publications[:id], publications[:body], similar_publication[:id].as(:similar_publication_id), similar_publication[:body].as(:similar_body)]}.
left_join(Sequel[:publications].as(:similar_publication), :id=>:publication_id)
end
end
end