我在数据库的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参数必须是一个数组,其中的id只能来自这些url,例如:
array(
[0] => 34123122
[1] => 22214322
)
因此,我必须在这个函数中执行一些操作,以便能够检索包含这些id的url行。我该怎么做?url可以更改,但
/******.json
结尾的模式始终相同。我不想让另一个查询选择url的开头,这会使应用程序太慢。
最佳答案
必须在mysql中使用regex,更改函数:
function retrieve($ids) {
$regex = '('.implode('|', $ids).').json$';
return $this->fetchAll("SELECT * FROM table WHERE url REGEXP '$regex'");
}
注意:对于大型表,这不是最佳解决方案。我建议您在表中创建一个id字段,如果所有id都是唯一的,那么您可以将id作为主键。同样,每当您在该表中插入时,从url中取出id部分并将其插入id字段。这样你就可以跳过regex了。如果您愿意创建一个id字段,那么可以执行以下查询来更新当前的表id字段:
mysql> update your_table_name set id=replace(substring_index(url, '/', -1), '.json', '');