Я хочу напечатать символы соответствующих цифр без использования какого-либо цикла, используя запрос php или mysql. У меня есть одна таблица с именем "test".
Мой стол,
Если вход = 011, выход должен быть "thh". Как печатать как это без использования какого-либо цикла. Пожалуйста, помогите мне.
ИЛИ 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
//Edit. Поскольку вы запросили простую версию SQL, это может помочь. Но я не очень хорошо разбираюсь в SQL, я считаю, что ответ Leran стал чище! Разница в том, что я не создаю aux-таблицу и жаль, что вы не смогли, но я использовал цикл!
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();
Как вариант
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 Fiddle - http://www.sqlfiddle.com/#!9/5a731b/1
implode
для объединения массива обратно в строку.