Несколько возможных текстовых вводов с помощью операторов if

Редактировать

Решение, упомянутое @leftclickben, также эффективно. Мы также можем использовать хранимую процедуру для того же самого.

CREATE PROCEDURE get_tree(IN id int)
 BEGIN
 DECLARE child_id int;
 DECLARE prev_id int;
 SET prev_id = id;
 SET child_id=0;
 SELECT col3 into child_id 
 FROM table1 WHERE col1=id ;
 create TEMPORARY  table IF NOT EXISTS temp_table as (select * from table1 where 1=0);
 truncate table temp_table;
 WHILE child_id <> 0 DO
   insert into temp_table select * from table1 WHERE col1=prev_id;
   SET prev_id = child_id;
   SET child_id=0;
   SELECT col3 into child_id
   FROM TABLE1 WHERE col1=prev_id;
 END WHILE;
 select * from temp_table;
 END //

Мы используем временную таблицу для хранения результатов вывода и, поскольку временные таблицы основаны на сеансах, мы не будем иметь никаких проблем относительно выходные данные неверны.

SQL FIDDLE Demo Попробуйте этот запрос:

SELECT 
    col1, col2, @pv := col3 as 'col3' 
FROM 
    table1
JOIN 
    (SELECT @pv := 1) tmp
WHERE 
    col1 = @pv

SQL FIDDLE Demo :

| COL1 | COL2 | COL3 |
+------+------+------+
|    1 |    a |    5 |
|    5 |    d |    3 |
|    3 |    k |    7 |

Примечание. Значение parent_id должно быть меньше, чем child_id для этого решения.

0
задан double-beep 2 March 2019 в 14:57
поделиться

2 ответа

Ваш путь должен быть изменен так, чтобы он работал:

@echo off

rem Your code before the code you provided above ^^

:forest1
echo You awake in a forest, you do not know where you are or why you are there.
echo In front of you is a small goblin like creature
goto :recoil1

:recoil1
set /p "answer=What do you do? "
if "%answer%" == "run" (
    goto :run1
) else (
    if "%answer%" == "attack" (
        goto :attack1
    ) else ( 
        if "%answer%" == "befriend" (
            goto :befriend1
        ) else (
            if "%answer%" == "scream" (
                goto :scream1
            ) else ( 
                if "%answer%" == "dance" (
                    goto :dance1
                ) else (
                    echo Nothing happened.
                    timeout /t 1
                    goto :forest1
                )
            )
        )
    )
)

Понимаете: это немного сложно; Вы пропустили много скобок!

Итак, используйте команду choice с некоторыми изменениями:

@echo off

rem Your code before the code you provided above ^^

:forest1
echo You awake in a forest, you do not know where you are or why you are there.
echo In front of you is a small goblin like creature
goto :recoil1

:recoil1
echo What do you do? Here is a list of options:
echo r - run away
echo a - attack the goblin
echo b - be friend with the goblin
echo s - scream
echo d - dance
echo n - do nothing

choice /C:rabsdn /N

if errorlevel 6 (
    echo Nothing happened.
    timeout /t 1
    goto :forest1
)
if errorlevel 5 goto :dance1
if errorlevel 4 goto :scream1
if errorlevel 3 goto :befriend1
if errorlevel 2 goto :attack1
if errorlevel 1 goto :run1

, что яснее, быстрее и удобочитаемее, не так ли?

[ 1113] Примечание: if с errorlevel должны быть в порядке убывания, потому что if errorlevel n означает, что errorlevel больше или равно - n!

Измените параметры, чтобы они лучше подходили для вас.

0
ответ дан double-beep 2 March 2019 в 14:57
поделиться

Почему бы не попробовать использовать if в цикле for для выполнения этой работы?

@echo off
:forest1
cls & echo/ & if defined answer set answer=<nul
echo/  you awake in a forest, you do not know where you are or why you are there.
echo/  infront of you is a small goblin like creature

:recoil1
set /p "answer= What do you do? "
for %%i in (run attack befriend scream dance) do if /i "%answer%" == "%%i" goto :%answer%1

echo/ Nothing happened
timeout /t 1 & goto forest1

:run1 
echo/ Here I'm in Label run1 & exit /b

:attack1
echo/ Here I'm in Label attack1 & exit /b

:befriend1 
echo/ Here I'm in Label befriend1 & exit /b

:scream1 
echo/ Here I'm in Label scream1 & exit /b

:dance1
echo/ Here I'm in Label dance1 & exit /b
0
ответ дан It Wasn't Me 2 March 2019 в 14:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: