我想使用php或mysql查询打印相应数字的字符而不使用任何循环。我有一个名为“test”的表。
我的桌子是,
如果输入= 011,则输出应为“thh”。如何在不使用任何循环的情况下进行打印。请帮帮我。
答案 0 :(得分:1)
还是php? 您还可以使用SQL查询填充这些数组。
$input = "011";
$digits = array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9");
$characters = array("t", "h", "i", "r", "u", "v", "o", "n", "a", "m");
$newphrase = str_replace($digits, $characters, $input);
echo $newphrase; //Output: thh
//编辑 由于您请求了纯SQL版本,这可能会有所帮助。 但我对SQL不太满意,我相信Leran的答案更清晰! 区别在于我没有创建一个辅助表,抱歉让你失败,但我使用了一个循环!
SET @input = "011";
SET @input_len = CHAR_LENGTH(@input);
DELIMITER $$
DROP PROCEDURE IF EXISTS test_mysql_while_loop$$
CREATE PROCEDURE test_mysql_while_loop()
BEGIN
DECLARE x INT;
DECLARE str VARCHAR(255);
SET x = 1;
SET str = '';
WHILE x <= @input_len DO
SET @inputindex = substring(@input , x, 1);
select test.character from test where test.digits = @inputindex INTO @translation;
SET str = CONCAT(str,@translation,'');
SET x = x + 1;
END WHILE;
SELECT str as result;
END$$
DELIMITER ;
CALL test_mysql_while_loop();
答案 1 :(得分:1)
作为变种
create table test(`character` char(1),digits int);
insert test(`character`,digits)values('t',0),('h',1),('i',2),...,('m',9);
-- the auxiliary table
create table input_len(ln int);
insert input_len(ln) values(1),(2),(3),(4),(5),...,(max_length_of_input);
查询
select
group_concat(t.`character` ORDER BY l.ch_pos SEPARATOR '') result
from test t
join
(
select ln ch_pos,substr('0121',ln,1) digits
from input_len
where ln<=length('0121')
) l
on l.digits=t.digits