gpt4 book ai didi

mysql - 是否可以使用 Ruby Sequel 实现 SUBSTRING_INDEX 逻辑来创建列别名?

转载 作者:行者123 更新时间:2023-11-29 12:43:21 27 4
gpt4 key购买 nike

我有一个客户,他有一个图像/媒体数据库,该数据库使用文件命名约定,其中文件名本身包含每个图像的页码。

这些图像是书籍的扫描件,第 1 页通常只是封面图像,而书籍的实际“第 1 页”是在扫描编号 3 等上扫描的。考虑到这一点,文件名在数据库中将如下所示字段文件名:

  • great_book_001.jpg
  • great_book_002.jpg
  • great_book_003_0001.jpg
  • great_book_004_0002.jpg
  • great_book_005_0003.jpg

考虑到这一点,我想使用 MySQL 的 SUBSTRING_INDEX 从文件名中提取该页码。使用纯 MySQL,我花了大约 5 分钟才想出这个效果很好的原始查询:

SELECT `id`, `filename`, SUBSTRING_INDEX(SUBSTRING_INDEX(`filename`, '.',  1), '_',  -1) as `page`
FROM `media_files`
WHERE CHAR_LENGTH(SUBSTRING_INDEX(SUBSTRING_INDEX(`filename`, '.', 1), '_', -1)) = 4
ORDER BY `page` ASC
;

问题是我试图了解在使用 Sequel Gem for Ruby 时是否可以使用 SUBSTRING_INDEX 实现列别名。 ?

到目前为止,我似乎无法通过初始创建这样的数据集来做到这一点:

# Fetch a dataset of media files.
one_to_many :media_files, :class => MediaFiles,
:key => :id, :order => :rank

由于返回的数据集是一个数组,我正在使用 Ruby map method滚动浏览获取的数据集,然后在使用 the Ruby mergepage 插入数据集之前进行一些字符串处理:

# Roll through the dataset & set a page value for files that match the page pattern.
def media_files_final
media_files.map{ |m|
split_value = m[:filename].split(/_/, -1).last.split(/ *\. */, 2).first
if split_value != nil && split_value.length == 4
m.values.merge({ :page => split_value })
else
m.values.merge({ :page => nil })
end
}
end

效果很好。但与可以一次性完成所有操作的简单 MySQL 查询相比,这对我来说似乎很笨拙。所以问题是,有什么方法可以使用 Sequel Gem for Ruby 获得相同的结果吗? ?

我认为 Sequel 框架中可能不容易支持 SUBSTRING_INDEX。但如果没有,我是否有机会插入原始 MySQL 而不是使用 Sequel 方法来实现此目标?

最佳答案

如果您希望您的关联使用该附加选定列和该过滤器,只需使用 :select:conditions 选项即可:

substring_index = Sequel.expr{SUBSTRING_INDEX(SUBSTRING_INDEX(:filename, '.',  1), '_',  -1)}
one_to_many :media_files, :class => MediaFiles,
:key => :id, :order => :page,
:select=>[:id, :filename, substring_index.as(:page)],
:conditions => {Sequel.function(:CHAR_LENGTH, substring_index) => 4}

关于mysql - 是否可以使用 Ruby Sequel 实现 SUBSTRING_INDEX 逻辑来创建列别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25801991/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com