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-else
Visual 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
'source' 카테고리의 다른 글
Woocommerce의 특정 제품 속성 값에 대한 모든 제품 변형 가져오기 (0) | 2023.09.21 |
---|---|
uppload_files true이지만 edit_post false로 사용자 지정 사용자 역할을 워드프레스합니다. 미디어를 삭제하고 편집하려면 어떻게 해야 합니까? (0) | 2023.09.21 |
How do I run a function on a different component with vuex (non parent/child components) (0) | 2023.09.21 |
wp_enqueue_script로 Google 지도 API 로드 중 (0) | 2023.09.21 |
Angularjs에서 ng-messages로 서버 오류를 표시하는 방법 (0) | 2023.09.21 |