source

if/-then-else 문에 행을 삽입하는 중

nicesource 2023. 9. 21. 20:35
반응형

if/-then-else 문에 행을 삽입하는 중

if-then-else를 사용하여 레코드가 존재하는지 확인한 후 다음을 사용하여 마지막 삽입을 호출합니다.$pdocon->lastInsertId()삽입된 행을 반환하지 않습니다.예를 들어,

if exists(
    SELECT first_name FROM `my_table` 
            WHERE first_name = 'adam'
    ) 
    then 
        SELECT * FROM `my_table` WHERE first_name = 'adam'
    else 
        INSERT INTO my_table
        (first_name) 
        values
        ('adam')
    END IF;

이(간소화) 코드는 레코드가 존재하는지 확인합니다.만약 존재한다면, 그것은 정보를 잡습니다.존재하지 않으면 삽입합니다.해당 부분은 모두 정상적으로 작동합니다. 존재하지 않는 이름에서 삽입 ID를 가져오려고 할 때 문제가 발생합니다(0을 lastInsertId로 반환).

이것을 해결할 실용적인 방법이 있습니까?

이름이 중복되지 않도록 하려면 열에 고유 인덱스 또는 제약 조건을 정의해야 합니다.

alter table t add unique constraint unq_my_table_first_name unique (first_name);

그러면 다음과 같은 트릭을 사용하여 정확한 ID를 얻을 수 있습니다.last_insert_id():

insert into mytable (first_name)
    values ('Adam')
    on duplicate key update id = last_insert_id(id);

그러면 다음을 사용할 수 있습니다.

select last_insert_id()

문장이 다음 문장인지 여부에 관계없이 마지막 삽입 ID를 가져옵니다.update아니면insert.

여기 db<> fiddle이 있습니다.

첫째, 질문은 PHP 태그가 없어야 합니다. 왜냐하면 PHP는 PHP 태그가 없기 때문입니다.if-then-elseVisual Basic 조건문인 조건문입니다.그럼에도 불구하고.if-else올바른 SQL 쿼리를 사용하여 이 문제를 처리할 수 있습니다. SQL은 이미 위의 문제를 해결하는 쿼리를 제공합니다. 즉 레코드가 있는지 확인하는 것이 도움이 될 것입니다.

SELECT column_name(s)
FROM table_name
WHERE EXISTS
(SELECT column_name FROM table_name WHERE condition);

미래를 보는 모든 사람들에게, 다른 사용자가 답을 올렸다가 삭제했습니다.이를 위한 올바른 방법은 다음과 같습니다.

if exists(
    SELECT first_name FROM `my_table` 
            WHERE first_name = 'adam'
    ) 
    then 
        SELECT * FROM `my_table` WHERE first_name = 'adam'
    else 
        INSERT INTO my_table
        (first_name) 
        values
        ('adam');
        SELECT LAST_INSERT_ID() as inserted;
    END IF;

언급URL : https://stackoverflow.com/questions/65974025/getting-inserted-row-on-if-then-else-statement

반응형