我在wordpress中制作了一个插件,它会查看所有文件,看看该文件是否被使用。问题是,当我获取所有文件并对其中的每个文件进行查询时,会有很多查询。
例如,3000条sql语句如下:
SELECT COUNT(*) FROM " . $table_prefix . "posts
WHERE post_content LIKE '%/$fileName%';
真正的问题是,如果进行大量的sql查询,服务器就会停机,所以问题是如何在不影响服务器的情况下查询3000个文件。
例如,我在一个目录中进行扫描,发现
a.jpg
b.jpg
c.jpg
d.jpg
……
……
z.jpg
所以知道它们中是否每一个的唯一方法是使用我之前写的查询,所以我会有一些类似的
SELECT COUNT(*) FROM " . $table_prefix . "posts
WHERE post_content LIKE 'a.jpg';
SELECT COUNT(*) FROM " . $table_prefix . "posts
WHERE post_content LIKE 'b.jpg';
....
SELECT COUNT(*) FROM " . $table_prefix . "posts
WHERE post_content LIKE 'z.jpg';
我使用这个查询是因为我在搜索该文件是否在任何帖子中被引用,如果计数为0,则意味着该文件没有使用
因此,对于那些问问题是什么的人来说,是我如何毫无问题地进行所有查询,或者我如何更改查询以更好地搜索每个文件
您应该将对文件(1:1或1:N)的引用存储在另一个表中。然后您就不必使用"like"-语句,性能应该会更好。那么您也可以只使用一个sql语句来处理所有这些语句:
select count(*), file_id from ... group by file_id
如果你不想改变你的数据库模型,你可以试试这样的方法:
select count(*), files.filename from
POSTS p left join ((select 'a.jpg' as filename) union (select 'b.jpg' as filename) union ...) files
on p.post_content CONCAT('%', files.filename, '%') collate utf8_general_ci
group by files.filename