我想换成像值:从选择查询的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查询完成?
我想换成像值:从选择查询的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查询完成?
假设图像名称的长度是可变的,我想你需要编写一个存储函数来在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。
哇。我使用了函数路径!它就像一个魅力!谢谢Matt! – yongcc
看看MySQL的REPLACE吧(http://www.w3resource.com/mysql/string-functions/mysql-replace-function.phphttp://www.w3resource.com/mysql/string-functions/ mysql-replace-function.php) – Stuart