php - 比较数据库中 url 内的整数

标签 php mysql

我在数据库中的 url 列中有以下行:

http://some_url/something/34123122.json
http://some_url/something/53124322.json
http://some_url/something/22214322.json

我想在某个函数中检索它们,就像这样(伪代码):

function retrieve($ids) {
   return $this->fetchAll("SELECT * FROM table WHERE url IN $ids");
}

问题是 $ids 参数必须是一个仅包含来自这些 url 的 id 的数组,例如:

array(
  [0] => 34123122
  [1] => 22214322
)

所以我必须在此函数中做一些事情,以便我可以检索具有包含这些 ID 的 URL 的行。我怎样才能做到这一点?网址可以更改,但 /******.json 结尾始终具有相同的模式。

我不想再选择 url 的开头进行查询,这会大大降低应用程序的速度。

最佳答案

执行此操作的正确方法是仅查询您感兴趣的数据部分 - 数字。因此,您在附近执行任务时会立即获得 +10 的情报,并且您决定可以创建另一列来保存该数字。你的 table 现在看起来像这样:

CREATE TABLE mytable (
    id int not null auto_increment,
    url varchar(255) not null,
    json_number int not null,
    PRIMARY KEY(id),
    INDEX(json_number)
) ENGINE = InnoDB;

在插入表之前,您使用 integer sanitizing filter从 URL 中提取数字而不会浪费太多时间

给定这样的 URL:http://some_url/something/34123122.json 您可以像这样轻松提取数字:

$url = 'http://some_url/something/34123122.json';
$number = filter_var($url, FILTER_SANITIZE_NUMBER_INT);

echo $number; // echoes 34123122

现在您的查询很简单,您检查同时也被索引的 json_number 列。

当然,您可以忽略我写的所有内容并尝试其他答案,这些答案很丑陋,最糟糕的是 - 它们都是全表扫描。

关于php - 比较数据库中 url 内的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31534083/

相关文章:

php - Laravel 5 和 Internet Explorer : Token Mismatch

php - Laravel 8 迁移 "General error: 1215 Cannot add foreign key constraint"

php - 使用嵌套无序列表构建树

php - 从 PHP/Javascript 编码的网站/页面打开 iphone 应用程序

php - 如何在没有 mysql 的情况下清理 php 输入

php - 文件未加载到 php 文件中

php - 我可以在 PHP 中混合使用 MySQL API 吗?

php - 为什么我的 php 脚本不能连接到 mysql?

用于显示 SQL 表的列中的行数的 Java 应用程序脚本。 SQL 查询错误。输出应该在标签中

PHP - 使用 PDO 将字符串数组绑定(bind)到 IN() 子句