2016-04-06 54 views
1

我想换成像值:从选择查询的MySQL从选择替换数值到另一个字符串

1106,1107,1108 

像一串链接:

http://something.com/img/1/1/0/6/1106.jpg,http://something.com/img/1/1/0/7/1107.jpg,http://something.com/img/1/1/0/8/1108.jpg 

可以把它在MySQL查询完成?

+0

看看MySQL的REPLACE吧(http://www.w3resource.com/mysql/string-functions/mysql-replace-function.phphttp://www.w3resource.com/mysql/string-functions/ mysql-replace-function.php) – Stuart

回答

0

假设图像名称的长度是可变的,我想你需要编写一个存储函数来在MySQL中原生实现这个函数,但没有明显的内置函数。

以下示例将采取1106并将其转换为http://something.com/img/1/1/0/6/1106.jpg。要解析多个图像ID(如1106,1107,1108),您需要扩展它以在每次找到逗号时再次插入路径,或者(更好地)以不以逗号分隔的方式从数据库中选择结果。

DELIMITER // 
CREATE FUNCTION TO_IMAGE_PATH(id VARCHAR(255), path VARCHAR(255)) 
RETURNS VARCHAR(255) DETERMINISTIC NO SQL 
BEGIN 
    DECLARE output VARCHAR(255) DEFAULT path; 
    DECLARE position INT DEFAULT 1; 
    WHILE position <= LENGTH(id) DO 
     SET output = CONCAT(output, SUBSTRING(id, position, 1), '/'); 
     SET position = position + 1; 
    END WHILE; 
    SET output = CONCAT(output, id, '.jpg'); 
    RETURN output; 
END// 
DELIMITER ; 

SELECT TO_IMAGE_PATH('1106', 'http://something.com/img/'); 
-- Output: http://something.com/img/1/1/0/6/1106.jpg 

您可能更愿意传入jpg扩展名或硬编码初始路径。

虽然这确实起作用,但这似乎是一个问题的示例,在您选择结果后,可能会在另一种编程语言中更好地解决该问题。

如果图像ID的所有是是4个位数,你可以做简单(但不太高雅)

SELECT CONCAT(
    'http://something.com/img/', 
    SUBSTRING(field_name, 1, 1), '/', 
    SUBSTRING(field_name, 2, 1), '/', 
    SUBSTRING(field_name, 3, 1), '/', 
    SUBSTRING(field_name, 4, 1), '/', 
    field_name, '.jpg'); 

同样,你需要制定出如何选择值了所以它们不是逗号分隔的。一般来说,如果你的数据库中有存储值逗号分隔,然后you shouldn't be

+0

哇。我使用了函数路径!它就像一个魅力!谢谢Matt! – yongcc

相关问题