我在数据库中的 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/