【发布时间】:2011-12-05 18:36:50
【问题描述】:
我正在处理一堆数据,但我还没有将重复检查器编码到数据处理器中,所以我预计会发生重复。我运行了以下 SQL 查询:
SELECT body, COUNT(body) AS dup_count
FROM comments
GROUP BY body
HAVING (COUNT(body) > 1)
然后返回一个重复列表。调查这个我发现这些重复有多个哈希。评论的最短字符串是"[deleted]"。所以让我们以此为例。在我的数据库中,有九个评论实例为"[deleted]",在我的数据库中,这会产生 1169143752200809218 和 1738115474508091027 的哈希值。116 被找到 6 次,173 被找到 3 次。但是,当我在 IRB 中运行它时,我得到以下信息:
a = '[deleted]'.hash # => 811866697208321010
这是我用来生成哈希的代码:
def comment_and_hash(chunk)
comment = chunk.at_xpath('*/span[@class="comment"]').text ##Get Comment##
hash = comment.hash
return comment,hash
end
我已经确认我不会在我的代码中的其他任何地方触碰评论。这是我的数据映射器类。
class Comment
include DataMapper::Resource
property :uid , Serial
property :author , String
property :date , Date
property :body , Text
property :arank , Float
property :srank , Float
property :parent , Integer #Should Be UID of another comment or blank if parent
property :value , Integer #Hash to prevent duplicates from occurring
end
我是否正确假设字符串上的.hash 每次在同一字符串上调用时都会返回相同的值?
假设我的字符串由"[deleted]" 组成,哪个值是正确的?
有没有办法可以在 ruby 中使用不同的字符串,但 SQL 会将它们视为相同的字符串?对于为什么会发生这种情况,这似乎是最合理的解释,但我真的是在黑暗中拍摄。
【问题讨论】:
标签: sql ruby string hash hashtable