0

海量新手,非常感谢任何帮助。

我有一个 mysql 数据库,其中包含大约 30,000 个条目,每个条目都有一个指向 .jpg 格式的缩略图的链接。

我试图弄清楚是否有任何方法可以通过 mysql 数据库并验证每个链接是否仍然有效 - 也就是 .jpg 文件是否在它应该在的位置?

所以每个条目都有一个 id、name、thumb(这是一个 url)。

谢谢!

4

3 回答 3

0

SQL小提琴

SELECT * from table_name where SUBSTRING(url, -3, 3) = 'jpg';
于 2013-01-13T21:09:17.287 回答
0

对于链接,执行查询以获取所有链接,例如:

SELECT DISTINCT url FROM your_stuff;

你没有提到你的数据库的确切性质,但类似的东西应该可以工作。

然后循环遍历它,并为每一个使用 cURL 之类的东西来执行 HEAD 请求 - 这比通常的 GET 请求更好,因为它是相同的,除了服务器不应该返回实际文件,所以你不必下载每个图像只是为了看看它们是否在那里。只需执行 HEAD 请求,并确认服务器以状态 200 响应。

这个问题更多地涉及 cURL 中的 HEAD 请求

于 2013-01-13T21:00:27.843 回答
0

考虑到您的问题中的这一行:“每个都带有指向 .jpg 格式的缩略图的链接。”

您也可以尝试regexp: 结尾.jpg

SELECT DISTINCT url_column as regex_u, id 
    FROM your_table
    where url_column regexp '\(.jpg)$';

即使有likecontainsjpg

    SELECT DISTINCT url_column as like_u, id 
    FROM your_table
    where url_column like '%.jpg%';

另一个带有instr:

    SELECT DISTINCT url_column as instr_u , id
    FROM your_table
    where instr(url_column, '.jpg') > 0;

如果你想匹配一个整体ulr

    SELECT DISTINCT url_column as url_u, id 
    FROM your_table
    where url_column regexp '^(https?://|www\\.)[\.A-Za-z0-9/_\-]+\\.(jpg)$'
    ;

另一个使用Right

    SELECT DISTINCT url_column as right_u, id 
    FROM your_table
    where Right(url_column,4) = '.jpg';

请检查explain plan最有效的解决方案。LIKE似乎需要的时间最长。

于 2013-01-13T21:07:13.857 回答