Печать символов соответствующих цифр без использования цикла с помощью запроса MySQL

0

Я хочу напечатать символы соответствующих цифр без использования какого-либо цикла, используя запрос php или mysql. У меня есть одна таблица с именем "test".

Мой стол,

Изображение 174551

Если вход = 011, выход должен быть "thh". Как печатать как это без использования какого-либо цикла. Пожалуйста, помогите мне.

  • 0
    Верните требуемые строки, которые с помощью PHP могут быть возвращены в виде массива, а затем вы можете использовать функцию PHP implode для объединения массива обратно в строку.
Теги:

2 ответа

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

//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();
  • 0
    Да, это работает. Есть ли возможности с SQL-запросом?
  • 0
    Как реализовать эту же концепцию в MySQL запрос?
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 Fiddle - http://www.sqlfiddle.com/#!9/5a731b/1

Ещё вопросы

Сообщество Overcoder
Наверх
Меню