gpt4 book ai didi

按字符串搜索 PHP MySQL 表 - 使用散列?

转载 作者:行者123 更新时间:2023-11-29 00:22:07 25 4
gpt4 key购买 nike

使用 PHP,我有一个带有 Actions 表的 MySQL 数据库,用户可以在其中选择性地将操作分配给他们网站中的某些页面。每个此类分配都会产生一个操作行,其中包含(除其他外)唯一的 ActionId 和相应页面的 URL。

稍后,当在特定页面的上下文中时,我想查明是否有分配给该页面的操作,并获取 (SELECT) 适当的操作行。那时我知道我的页面的 URL,所以我可以通过这个相对较长的字符串搜索 Actions 表。我怀疑这不是在数据库中搜索的最佳方式。

我假设更好的方法是使用某种哈希将我的长 URL 字符串转换为整数,确保没有两个不同的 URL 被转换为相同的整数(加密不是这里的问题)。有这样的PHP函数吗?或者,是否有更好的策略?

注意我已经看到了这个:SQL performance searching for long strings - 但它似乎并没有真正提出一个可靠的解决方案,除了提到 md5(它散列成一个字符串,而不是整数)。

最佳答案

散列策略是一个很好的策略。

处理 URL 字符串可能确实是个问题,因为它们可能很长,并且包含很多特殊字符,这对于 MySQL 搜索(REGEXPLIKE )。

这就是哈希解决问题的原因。即使 md5 不是用于散列密码的良好散列函数(因为它不再安全),也适用于散列 URL。

通过这种方式,您会将 http://www.stackoverflow.com 更改为 4c9cbeb4f23fe03e0c2222f8c4d8c065,这将非常独特(除非您非常不幸) .

设置完 md5_url 字段后,您可以使用以下方式进行搜索:

SELECT * FROM Actions where md5_url=?

? 是当前 URL 的 md5($url)

当然一定要在你的md5_url字段上设置一个索引:

ALTER TABLE Actions
ADD md5_url varchar(32),
ADD KEY(md5_url);

关于按字符串搜索 PHP MySQL 表 - 使用散列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20681332/

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