使用mysql查询不使用任何循环打印相应数字的字符

时间:2018-04-11 04:49:07

标签: php mysql

我想使用php或mysql查询打印相应数字的字符而不使用任何循环。我有一个名为“test”的表。

我的桌子是,

enter image description here

如果输入= 011,则输出应为“thh”。如何在不使用任何循环的情况下进行打印。请帮帮我。

2 个答案:

答案 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

SQL小提琴 - http://www.sqlfiddle.com/#!9/5a731b/1